asp.net-identity - 将身份用户对象传递给 AuthorizationFilterAttribute
问题描述
如何将完整的身份用户对象从 CustomOAuthBearerAuthenticationProvider 传递给 AuthorizationFilterAttribute。
public class CustomOAuthBearerAuthenticationProvider : OAuthBearerAuthenticationProvider
{
public override Task ValidateIdentity(OAuthValidateIdentityContext context)
{
var appUserManager =
context.OwinContext.GetUserManager<ApplicationUserManager>();
var identity = context.Ticket.Identity;
var user = appUserManager.FindByIdAsync(identity.GetUserId()).Result;
context.Ticket.Identity.AddClaim(new Claim("PSK", user.PSK));
return base.ValidateIdentity(context);
}
}
public class TwoFactorAuthorizeAttribute : AuthorizationFilterAttribute
{
public override Task OnAuthorizationAsync(HttpActionContext
actionContext, System.Threading.CancellationToken cancellationToken)
{
var principal = actionContext.RequestContext.Principal as
ClaimsPrincipal;
var psk= principal?.FindFirst("psk").Value; //I want to read full object rather than individual property
}
}
解决方案
我想您可以创建一些实用程序类,您可以在其中获取令牌并读取所有声明然后发送它,然后TwoFactorAuthorizeAttribute
在构造的类中注入该实用程序并调用该方法以获取列表。
var identity = (ClaimsIdentity)User.Identity;
IEnumerable<Claim> claims = identity.Claims;
推荐阅读
- python - 如何停止导入的python首先运行并且仅在代码中调用时运行
- elasticsearch - 使用选定方面获取聚合结果
- android - 在 gradle 构建脚本中更改 android 主题
- gcc - 我想在我的 Makefile 中用 'gcc' 替换 'ld' 以链接我的内核对象
- python - 如何在虚拟机上使用 pyautogui?
- python - 寻找主要因素的差异
- netlogo - 海龟每 10 刻进入后网络扩展邻域影响误差除以零
- javascript - ng-model 作为 ng-init 输入的值
- python - 使变量的 type() 信息不可变
- kubernetes - Kubernetes:如何实现网络资源配额