Authentication 向webapi承载令牌添加额外详细信息

Authentication 向webapi承载令牌添加额外详细信息,authentication,asp.net-web-api,Authentication,Asp.net Web Api,我正在尝试学习新的webapi2.1身份验证 我已将承载令牌连接起来并使用我的webapi。我想做的下一件事是能够在令牌中存储一些附加信息(如果可能的话),这样当客户端发回令牌时,我就可以检索细节,而不需要它们发送多个值 令牌是否可以扩展以包含自定义数据 抱歉,如果问题有点模糊,但我已经进行了大量的搜索,似乎找不到任何进一步的信息 谢谢因为令牌是用“机密”密钥签名的-只有发卡机构才能向其添加数据 在Web API中接收到令牌后,您可以对声明集进行修改—这称为声明转换 我这里有一个样本: 实际上

我正在尝试学习新的webapi2.1身份验证

我已将承载令牌连接起来并使用我的webapi。我想做的下一件事是能够在令牌中存储一些附加信息(如果可能的话),这样当客户端发回令牌时,我就可以检索细节,而不需要它们发送多个值

令牌是否可以扩展以包含自定义数据

抱歉,如果问题有点模糊,但我已经进行了大量的搜索,似乎找不到任何进一步的信息


谢谢

因为令牌是用“机密”密钥签名的-只有发卡机构才能向其添加数据

在Web API中接收到令牌后,您可以对声明集进行修改—这称为声明转换

我这里有一个样本:

实际上,您正在编写一些代码来检查传入的令牌,并将特定于应用程序的声明添加到结果主体中

//将声明转换为应用程序标识
应用程序使用索赔信息(转换索赔);
私有任务转换声明(ClaimsPrincipal传入)
{
如果(!incoming.Identity.IsAuthenticated)
{
返回任务.FromResult(传入);
}
//解析传入声明-使用应用程序声明创建新主体
var索赔=新列表
{
新索赔(ClaimTypes.Role,“foo”),
新索赔(ClaimTypes.Role,“bar”)
};
var nameId=incoming.FindFirst(ClaimTypes.NameIdentifier);
如果(nameId!=null)
{
添加(nameId);
}
var thumbprint=incoming.FindFirst(ClaimTypes.thumbprint);
如果(指纹!=null)
{
索赔。添加(指纹);
}
var id=新的索赔实体(“申请”);
id.AddClaims(索赔);
返回Task.FromResult(新的ClaimsPrincipal(id));
}

谢谢您的解释。我以你为例,将其添加到我的项目中,但它不了解app.UseClaimsTransformation(TransformClaims);UseClaimsTransformation-这是什么名称空间?抱歉,我没有引用thinktecture包。啊,抱歉,最后一个问题。是否可以为每个请求添加自定义声明值,而不是为每个声明插入静态数据?我有一个包含业务的应用程序,我想将persons businessId存储为claimYes绝对-想法是您分析传入的身份,并创建一个包含应用程序/业务特定声明的新身份。我知道这已经快一年了,但我必须做类似的事情-但不是在应用程序启动时。当用户登录时,他们会进入一个页面,在下拉列表中选择“租户”。我希望租户ID作为声明保存在承载令牌中……但此时令牌已经创建。这可能吗?