如何更改 asp.net core 1 中的令牌响应?
Posted
技术标签:
【中文标题】如何更改 asp.net core 1 中的令牌响应?【英文标题】:How to change token reponse in asp.net core 1? 【发布时间】:2016-08-03 10:30:05 【问题描述】:我正在使用 JWT 令牌和 OpenIdConnectServer。一切都很好,但我无法在令牌响应中添加自定义属性......结果如下:
resource": "resource_server_1",
"token_type": "bearer",
"access_token": "eyJhb....LSk5PQldEVVFaTllNU",
"expires_in": "3600"
我想添加一些属性,例如用户名或角色... 我正在尝试通过 AuthenticationProperties 添加,但它不起作用。这是我的代码:
public override Task GrantResourceOwnerCredentials(GrantResourceOwnerCredentialsContext context)
ClaimsIdentity identity = new ClaimsIdentity(OpenIdConnectServerDefaults.AuthenticationScheme);
identity.AddClaim(ClaimTypes.Name, "test", "token id_token");
identity.AddClaim(ClaimTypes.Role, "test", "token id_token");
var ticket = new AuthenticationTicket(
new ClaimsPrincipal(identity),
new AuthenticationProperties(new Dictionary<string, string>
"username", "test"
),
context.Options.AuthenticationScheme);
ticket.SetResources(new[] "resource_server_1" );
context.Validated(ticket);
return Task.FromResult<object>(null);
【问题讨论】:
【参考方案1】:要向令牌响应添加自定义属性,您可以查看另一个 SO 问题:Overriding TokenEndPoint in AspNet.Security.OpenIdConnect.Server
也就是说,这不是我推荐的方法。相反,您应该使用 OpenID Connect 提供的新 id_token
概念,它也支持 ASOS 中的密码流,并允许在授权服务器和客户端应用程序之间共享用户详细信息。
为此,将scope=openid
添加到您的令牌请求中,OIDC 服务器中间件将开始返回一个 JSON Web 令牌,您可以读取该令牌以提取用户名等用户详细信息。请注意,只有指定 id_token
目标的声明才会包含在身份令牌中。阅读这篇 SO 帖子了解更多信息:https://***.com/a/35041102/542757
(在相关说明中,您没有向身份验证票证添加 ClaimTypes.NameIdentifier
声明:这不是合法操作,因为 OIDC 服务器中间件需要唯一的 id 来识别用户)
【讨论】:
感谢您的回答。你能写一些例子吗?我正在尝试为你的链接添加声明***.com/a/35041102/542757,但输出保持不变......=(仅"resource": "resource_server_1", "token_type": "bearer", "access_token": "eydCInHAm...Q", "expires_in": "3600"
您能分享一下您发送的令牌请求吗?
带有测试数据:) grant_type : password, username : test, password : test
on /connect/token
那么 scope=openid 参数在哪里? :P
添加这个。回复:"resource": "resource_server_1", "token_type": "bearer", "access_token": "ewNDkyMjcyLCJ1bmlx...OiJqa2R6Ii", "expires_in": "3600", "id_token": "eyJhaWF0I..r"
以上是关于如何更改 asp.net core 1 中的令牌响应?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ASP.NET Core 中的密码重置令牌中检索用户?
Asp.Net Core Identity 使用 JWT 中的哪些信息来将令牌授权为有效?
如何在 asp.net core 中设置 jwt 令牌的生命周期
如何撤销存储在 Identity Server 数据库中的 asp net core 中的刷新令牌