【发布时间】:2019-07-02 13:57:35
【问题描述】:
我有自定义身份验证处理程序 (AuthenticationHandler<TOptions>),它从自定义 cookie 进行身份验证。此 cookie 包含用户 ID 和其他用户信息。所以这个处理程序使用一些逻辑进行一些解密,以解析 cookie 并提取所有数据。
然后我有另一个身份验证处理程序,它应该获取所有用户角色。并且这个处理程序需要用户 ID,这是由第一个处理程序设置的。但是,当我尝试访问声明时,没有。
protected async override Task<AuthenticateResult> HandleAuthenticateAsync()
{
var allClaims = this.Context.User.Claims;
var userId = allClaims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier);
var identity = this.Context.User.Identities.FirstOrDefault();
var claims2 = identity.claims;
var userId2 = identity.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier);
}
allClaims 计数为 0。
userId 是 null。
identity 来自第一个身份验证处理程序,它不是 null。但是claims2 计数是0。
稍后我可以在控制器中查看所有声明。
我可以从第一个处理程序中复制解密逻辑,但感觉不对。
那么在此身份验证过程中,我如何访问来自其他处理程序的声明?
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc claims-based-identity