我正在尝试学习新的webapi2.1身份验证.
我已经将持有者令牌连接起来并使用我的webapi.我想做的下一件事是能够在令牌中存储一些额外的信息(如果可能的话),所以当客户端发回令牌时,我可以检索细节而无需发送多个值.
可以将令牌扩展为包含自定义数据吗?
对不起,如果问题有点模糊,但我有一个大的搜索,似乎无法找到任何进一步的信息
谢谢
解决方法@H_502_12@
由于令牌是用“秘密”密钥签名的 – 只有发行者可以向其添加数据.
在Web API中收到令牌后,您可以将某些内容修改为声明集 – 这称为声明转换.
本质上,您正在编写一些代码来检查传入的令牌,并将特定于应用程序的声明添加到结果主体中.
// Transform claims to application identity
app.UseClaimsTransformation(TransformClaims);
private Task<ClaimsPrincipal> TransformClaims(ClaimsPrincipal incoming)
{
if (!incoming.Identity.IsAuthenticated)
{
return Task.FromResult<ClaimsPrincipal>(incoming);
}
// Parse incoming claims - create new principal with app claims
var claims = new List<Claim>
{
new Claim(ClaimTypes.Role,"foo"),new Claim(ClaimTypes.Role,"bar")
};
var nameId = incoming.FindFirst(ClaimTypes.NameIdentifier);
if (nameId != null)
{
claims.Add(nameId);
}
var thumbprint = incoming.FindFirst(ClaimTypes.Thumbprint);
if (thumbprint != null)
{
claims.Add(thumbprint);
}
var id = new ClaimsIdentity("Application");
id.AddClaims(claims);
return Task.FromResult<ClaimsPrincipal>(new ClaimsPrincipal(id));
}
在Web API中收到令牌后,您可以将某些内容修改为声明集 – 这称为声明转换.
本质上,您正在编写一些代码来检查传入的令牌,并将特定于应用程序的声明添加到结果主体中.
// Transform claims to application identity app.UseClaimsTransformation(TransformClaims); private Task<ClaimsPrincipal> TransformClaims(ClaimsPrincipal incoming) { if (!incoming.Identity.IsAuthenticated) { return Task.FromResult<ClaimsPrincipal>(incoming); } // Parse incoming claims - create new principal with app claims var claims = new List<Claim> { new Claim(ClaimTypes.Role,"foo"),new Claim(ClaimTypes.Role,"bar") }; var nameId = incoming.FindFirst(ClaimTypes.NameIdentifier); if (nameId != null) { claims.Add(nameId); } var thumbprint = incoming.FindFirst(ClaimTypes.Thumbprint); if (thumbprint != null) { claims.Add(thumbprint); } var id = new ClaimsIdentity("Application"); id.AddClaims(claims); return Task.FromResult<ClaimsPrincipal>(new ClaimsPrincipal(id)); }