我是一个MVC网站,需要两个因素身份验证才能进行多项操作。并非所有用户都需要2fa,因此登录时无法设置。
我是一个AuthorizationAttribute,用于检查用户对特定2fa声明的声明。
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var principal = (ClaimsPrincipal)httpContext.User;
if (!principal.Identity.IsAuthenticated)
{
return false;
}
return
principal.Claims.Any(
x =>
x.Type == MyClaimTypes.AuthenticationMethod &&
x.Value == AuthenticationMethods.TwoFactorAuthentication);
}
如果它们不存在,我将它们发送到身份服务器中的2fa控制器,该控制器会提示用户输入2fa代码等。然后,用我在属性中检查的用户声明更新用户声明并将其发送回我的网站
在IdentityServer上我有以下
var claims = user.Claims.Where(c => c.Type != "amr").ToList();
claims.Add(new Claim(Constants.ClaimTypes.AuthenticationMethod, Constants.AuthenticationMethods.TwoFactorAuthentication));
claims.Add(new Claim(Constants.AuthenticationMethods.TwoFactorAuthentication, twoFactorProvider));
if (fullLogin)
{
user.RemoveClaim(user.Claims.First(c => c.Type == "amr"));
user.AddClaims(claims);
var newIdentity = new ClaimsIdentity(user.Claims);
context.Authentication.SignIn(newIdentity);
}
然而,我的网站并不是用户新主张的明智之处。
如何在我的属性中进行检查以找到新获得的声明?