2
我正在尝试学习新的webapi2.1验证片段。向webapi不记名令牌添加额外的详细信息
我得到了不记名令牌,并与我的webapi一起工作。我希望做的下一件事是能够在令牌中存储一些附加信息(如果可能的话),所以当客户端发回令牌时,我可以检索到详细信息而无需发送多个值。
令牌是否可以扩展以包含自定义数据?
很抱歉,如果这个问题是有点含糊,但我已经绕了个大追捕,似乎无法找到任何进一步的信息
谢谢
我正在尝试学习新的webapi2.1验证片段。向webapi不记名令牌添加额外的详细信息
我得到了不记名令牌,并与我的webapi一起工作。我希望做的下一件事是能够在令牌中存储一些附加信息(如果可能的话),所以当客户端发回令牌时,我可以检索到详细信息而无需发送多个值。
令牌是否可以扩展以包含自定义数据?
很抱歉,如果这个问题是有点含糊,但我已经绕了个大追捕,似乎无法找到任何进一步的信息
谢谢
由于令牌有一个“秘密”签订密钥 - 只有发行者可以向其添加数据。
在您的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));
}
谢谢您的解释。我已经把你的例子,并将其添加到我的项目,但它不知道app.UseClaimsTransformation(TransformClaims); UseClaimsTransformation - 这是什么名字空间? –
对不起,我没有思考包引用 –
啊对不起,最后一个问题。为每个请求插入静态数据,而不是为每个请求添加自定义声明值?我有一个包含商家的应用程序,并且我想将个人businessId作为一个索赔 –