经过身份验证后添加有关用户的附加声明的正确模式

问题描述 投票:0回答:1

我正在努力更好地处理 ASP.NET Core 身份验证。

我定义了一个简单的用户名/密码身份验证处理程序,它负责在

HandleAuthentication
中重建用户身份,以及在登录页面上完成登录后登录用户(创建 cookie)。

登录页面在进行用户名密码验证后,将构建如下所示的声明主体:

HttpContext.SignInAsync("MyAuthScheme", principal);

上面的行将调用我的身份验证处理程序的

Signin
方法,该方法保留带有来自主体对象的信息的基本 cookie。

在登录页面上,用户有一个复选框选项,用户还可以验证一些关键短语(如 2fa)。

如果选中该复选框,经过身份验证的用户将导航到其他身份验证屏幕,他们将在其中输入他们知道的一些关键短语。

问题:

  1. 一旦确认了关键短语,是否应该将其添加为现有用户主体的声明,还是添加新的身份?什么是正确的做法?我认为这应该是一个索赔?

  2. 我们需要记录用户已进一步验证的新事实(关键短语),因此我再次调用

    HttpContext.SignIn
    方法,该方法会从第一次登录时重建带有附加声明的cookie。

它似乎有效,但我很困惑是否应该为用户名、密码和关键短语使用单个身份验证处理程序或各 1 个处理程序?

如果我两个实现两个不同的身份,他们是否应该存储在两个不同的cookie中?

asp.net-core authentication
1个回答
0
投票

一旦确认了关键短语,是否应该将其添加为对现有用户主体的声明,还是添加新的身份?什么是正确的做法?我认为这应该是一个索赔?

在我看来,您应该首先决定要在应用程序中使用哪些声明。

例如,如果在您的应用程序内部您需要知道用户如何登录、关键短语或用户名密码,那么您可以在用户内部添加声明。并且无需为关键词和用户名密码添加多个身份。

我们需要记录用户已进一步验证的新事实(关键短语),因此我再次调用 HttpContext.SignIn 方法,该方法使用附加声明从第一次登录重建 cookie。

这有点混乱,通常,外部登录(两个因素)和用户名密码登录是不同的方法都允许用户登录。

我不明白你的意思是允许用户登录两次。您可以在正常登录方法中编写逻辑,该方法将检查该复选框,如果单击单击框,则重定向到外部登录页面。

在外部登录页面内,您可以编写声明并使用 httpcontext.signin 将声明写入 cookie。它不会调用此登录两次。

© www.soinside.com 2019 - 2024. All rights reserved.