从 brockallen 的文章中,他说“AuthenticateAsync() 可能会被多次调用”,这可能是 TransformAsync() 被多次调用(在我的应用程序上两次)的原因。
我不明白的是:
- 当我用参数构造 ClaimsIdentity 时,重复只发生在添加的声明(“现在”和“繁荣”)上。[参见下面的代码 1、图像 1-A和图像 1-B ]
- 当我构造没有参数的 ClaimsIdentity 时,添加的声明(“now”和“boom”)不会重复。[参见下面的代码 2、图像 2-A和图像 2-B ]
- 为什么添加的声明(now和boom)是重复的,而其他/预定义的声明(nbf,exp,iss,aud等)不是?[比较下图 1-A和图 1-B ]
有人知道为什么 ClaimsIdentity 会这样吗?
更新的问题:
我不明白的是:
当我用参数构造 ClaimsIdentity 时,重复只发生在添加的声明(“现在”和“繁荣”)上。[参见下面的代码 1、图像 1-A和图像 1-B ]
(已回答)当我构造没有参数的 ClaimsIdentity 时,添加的声明(“now”和“boom”)不会重复。[参见下面的代码 2、图像 2-A和图像 2-B ]
(已回答)- 为什么添加的声明(now和boom)是重复的,而其他/预定义的声明(nbf,exp,iss,aud等)不是?[比较下面的图 1-A和图 1-B ]
(未回答,但下面发布了替代代码)
代码 1
class ClaimsTransformer : IClaimsTransformation
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
var id = ((ClaimsIdentity)principal.Identity);
var ci = new ClaimsIdentity(id.Claims, id.AuthenticationType, id.NameClaimType, id.RoleClaimType);
ci.AddClaim(new Claim("now", DateTime.Now.ToString()));
ci.AddClaim(new Claim("boom", "hehehe"));
var cp = new ClaimsPrincipal(ci);
return Task.FromResult(cp);
}
}
图 1-A
图 1-B
代码 2
class ClaimsTransformer : IClaimsTransformation
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
var ci = new ClaimsIdentity();
ci.AddClaim(new Claim("now", DateTime.Now.ToString()));
ci.AddClaim(new Claim("boom", "hehehe"));
var cp = new ClaimsPrincipal(ci);
return Task.FromResult(cp);
}
}
图 2-A
图 2-B



