我希望能够为我的 asp.net 应用程序用户管理 2 个级别的身份验证。这个想法是用户可以使用“记住我”选项永久登录并访问一些没有非常敏感数据的用户页面,但是他们每次想要访问其他一些页面(例如他们的付款)时都必须重新输入他们的登录名/密码信息)。安全页面的这种身份验证仅适用于 session 。
当然,我可以通过处理另一个 cookie 来手动执行此操作,并让 Identity 处理永久的 cookie,但也许有一种方法可以仅使用 Identity 来执行此操作。

您可以了解我想通过亚马逊网站实现的目标。您可以永久登录,然后您在网站上总是以您的名字欢迎您,您可以看到您的推荐等...但是如果您想访问您的帐户或购买东西,您必须输入您的登录名/密码(然后它仅对 session 有效)。

谢谢 !

最佳答案

您可以设置两个登录 cookie 来表示这一点,您的正常登录页面使用默认身份应用程序 cookie。但是您更安全的页面会创建一个不同的 cookie,仅用于您的 super 安全区域。

以下是为此目的添加不同的 CookieMiddleware 的方法:

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "SuperSecureMode",
            AuthenticationMode = AuthenticationMode.Passive
        }

在重新验证凭据后,您可以像这样存储 cookie(您需要至少添加用户 ID,以便稍后验证):
HttpContext.GetOwinContext().Authentication.SignIn(new ClaimsIdentity("SuperSecureMode"));

在您的 super 安全页面上,您需要验证并从声明身份中提取用户 ID。
HttpContext.GetOwinContext().AuthenticateAsync("SuperSecureMode");

10-07 19:25
查看更多