System.IdentityModel.Tokens.JwtSecurityToken 自定义属性
Posted
技术标签:
【中文标题】System.IdentityModel.Tokens.JwtSecurityToken 自定义属性【英文标题】:System.IdentityModel.Tokens.JwtSecurityToken custom properties 【发布时间】:2017-05-17 22:28:47 【问题描述】:我的 AuthServer 目前正在使用以下代码生成 JwtSecurityToken:
var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey);
var handler = new JwtSecurityTokenHandler();
var jwt = handler.WriteToken(token);
有效载荷如下所示:
"unique_name": "myUserName",
"sub": "myUserName",
"role": "API_User",
"iss": "Automation",
"aud": "099153c2625149bc8ecb3e85e03f0022",
"exp": 1486056731,
"nbf": 1483464731
我想在令牌负载中添加一些自定义字段/属性,例如 ProfilePicURL,以便负载看起来像这样:
"unique_name": "myUserName",
"sub": "myUserName",
"role": "API_User",
"iss": "Automation",
"aud": "099153c2625149bc8ecb3e85e03f0022",
"exp": 1486056731,
"nbf": 1483464731,
"profilePicture": "http://url/user.jpg"
如何添加这些自定义属性并确保令牌包含它们?
【问题讨论】:
将其添加到派生自Dictionary<string, object>
即token.Payload["profilePicture"] = "http://url/user.jpg"
的Payload属性中
【参考方案1】:
JwtSecurityToken
公开了一个 JwtPayload Payload get; set;
属性。 JwtPayload
派生自 Dictionary<string, object>
所以只需将其添加到有效负载...
var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey);
token.Payload["profilePicture"] = "http://url/user.jpg"
var handler = new JwtSecurityTokenHandler();
var jwt = handler.WriteToken(token);
使用WriteToken
对令牌进行编码和签名很重要,因为简单地获取RawData
属性将不起作用(令牌将不包含自定义声明)。
【讨论】:
谢谢!!在任何地方都找不到这个,不知道这是一本可以编辑的字典!以上是关于System.IdentityModel.Tokens.JwtSecurityToken 自定义属性的主要内容,如果未能解决你的问题,请参考以下文章