我正在构建一个使用我们自己的数据模型,另一个ORM,其他业务逻辑等的自定义ASP.NET Identity 2.0实现。默认情况下,用户通过设置ApplicationCookie
登录,之后AuthorizeAttribute
识别cookie并将用户登录。对于我们自己的实现,我想添加更多登录方式。例如:
在所有这些情况下,用户必须登录,但允许用户执行的操作取决于他登录的方式。例如:当用户使用&#登录时39;密码重置令牌',他可能会更改他的密码但不做任何其他事情。当用户使用'用户名+密码'登录时,除了需要更高权限级别的操作(双因素方法发挥作用)之外,他基本上可以完成所有操作。为了做到这一点,我想构建一个自定义AuthorizeAttribute
来检查使用的登录方法,然后决定用户是否可以执行操作。
我面临的问题是我可以设置除ApplicationCookie
以外的其他Cookie(例如,通过SMS流程设置的TwoFactorCookie
),但这些Cookie无法识别作为身份验证cookie。因此,当我有TwoFactorCookie
时,我无法使用该Cookie登录。只有ApplicationCookie
会导致登录。
我遇到的问题:
ApplicationCookie
登录,或者我是否也可以使用自定义Cookie登录(例如,我可以使用ApplicationCookie
,TwoFactorCookie
和{ {1}}?XYZCookie
?据我所知,唯一需要做的就是设置一个cookie,并用正确的身份验证方法标记它,这样我就可以看到用户是如何登录的。修改
根据Hao Kung的建议,我做了几个扩展方法,如下所示:
CookieAuthenticationMiddleware
我尝试使用具有自定义身份验证类型(SMS)的自定义public static void UseSmsSignInCookie(this IAppBuilder app, TimeSpan expires)
{
if (app == null)
throw new ArgumentNullException("app");
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = ApplicationAuthenticationTypes.Sms,
AuthenticationMode = AuthenticationMode.Passive,
CookieName = CookiePrefix + ApplicationAuthenticationTypes.Sms,
ExpireTimeSpan = expires,
});
}
调用AuthenticationManager.SignIn
来记录某人。但这并不起作用:在调用SignIn之后,ClaimsIdentity
的结果仍然等于HttpContext.Current.User.Identity.AuthenticationType
。该cookie已按预期设置。
有没有人知道我错过了什么?
答案 0 :(得分:1)
所以CookieMiddleware的每个实例基本上代表一个auth cookie,如果你想要多个cookie,你可以添加多个CookieMiddleware并检索到你的cookie的ClaimsIdentity映射,你只需要在AuthenticationManager上调用Authenticate传入您想要的Cookie的AuthenticationType。