如何更改 asp.net core 1 中的令牌响应?

     2023-03-10     176

关键词:

【中文标题】如何更改 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 5 (ASP.NET Core) 中的受保护操作添加令牌验证

】如何仅为ASP.NET5(ASP.NETCore)中的受保护操作添加令牌验证【英文标题】:HowtoaddtokenvalidationonlyforprotectedactionsinASP.NET5(ASP.NETCore)【发布时间】:2016-05-0122:25:50【问题描述】:我已将JWT中间件添加到我的应用程序中:app.UseJwtBearerAuthe... 查看详情

如何从 ASP.NET Core 中的密码重置令牌中检索用户?

】如何从ASP.NETCore中的密码重置令牌中检索用户?【英文标题】:HowcanIretrieveauserfromapasswordresettokeninASP.NETCore?【发布时间】:2020-05-0417:22:46【问题描述】:我有一个ASP.NETCore2.1Web应用程序,并且正在添加忘记密码功能。我看过几... 查看详情

如何在 asp.net core 中设置 jwt 令牌的生命周期

】如何在asp.netcore中设置jwt令牌的生命周期【英文标题】:howtosetlifetimeofjwttokeninasp.netcore【发布时间】:2021-06-0404:14:55【问题描述】:我已经在asp.netcore3.1中创建了项目,并且可以成功授权。问题是我想增加JWT令牌的生命周期,... 查看详情

如何撤销存储在 Identity Server 数据库中的 asp net core 中的刷新令牌

】如何撤销存储在IdentityServer数据库中的aspnetcore中的刷新令牌【英文标题】:HowtorevokerefreshtokeninaspnetcorewhichisstoreinIdentiyServerDatabase【发布时间】:2020-08-2807:22:02【问题描述】:通过从Aspnet核心(API层)调用身份服务器4的RevokeAcce... 查看详情

如何在 Asp .Net Core SignalR Hub 中获取不记名令牌?

】如何在Asp.NetCoreSignalRHub中获取不记名令牌?【英文标题】:HowtogetthebearertokenintheAsp.NetCoreSignalRHub?【发布时间】:2020-11-2008:38:08【问题描述】:我需要访问Asp.NetCoreSignalRHub中的不记名令牌原始字符串(令牌本身)。我需要它,... 查看详情

如何从 Asp.net Core 中的查询字符串验证 Azure AD B2C 令牌?

】如何从Asp.netCore中的查询字符串验证AzureADB2C令牌?【英文标题】:HowtovalidateAzureADB2CtokenfromquerystringinAsp.netCore?【发布时间】:2019-10-0721:25:12【问题描述】:我有一个带有一些控制器和一个signalR集线器的asp.netwebapi应用程序。Azur... 查看详情

Asp.Net Core Identity 使用 JWT 中的哪些信息来将令牌授权为有效?

...用Asp.NetCore和JWT来了解JWT。我的流程之一总是通过删除和更改信息来使事情“失效”。当我这样做时,我注意到我的项 查看详情

从 ASP.NET Core 2.0 API 中的 JWT 令牌获取声明

...分使用cookie,而在API部分,我想使用JWT令牌。我的问题是如何从JWTt 查看详情

ASP.NET Core 中的 Jwt 令牌身份验证

】ASP.NETCore中的Jwt令牌身份验证【英文标题】:JwttokenauthenticationinASP.NETCore【发布时间】:2021-12-1711:55:34【问题描述】:我正在构建一个ASP.NETCoreWeb应用程序和Angular,我想使用基于令牌的身份验证来保护它。我对身份验证机制相... 查看详情

如何在 ASP.NET Core Web API 中添加两个不同的令牌

】如何在ASP.NETCoreWebAPI中添加两个不同的令牌【英文标题】:HowaddtwodifferenttokensinASP.NETCoreWebAPI【发布时间】:2019-12-0911:50:05【问题描述】:我需要我们控制器中的Authorize属性可以接受两个不同的令牌。一个令牌,由一个私有ADFS... 查看详情

ASP.NET Core 2.0 api 中 JWT 令牌中的自定义声明

...间】:2018-07-0119:31:01【问题描述】:在asp.netcorewebapi中,如何检索JWT令牌的自定义用户属性?我可以使用本教程https://fullstackmark.com/post/13/jwt-authentication-with-aspne 查看详情

如何更改 ASP.NET Core API 中的默认控制器和操作?

】如何更改ASP.NETCoreAPI中的默认控制器和操作?【英文标题】:HowtochangethedefaultcontrollerandactioninASP.NETCoreAPI?【发布时间】:2018-12-1610:53:44【问题描述】:我正在创建一个ASP.NETCoreAPI应用程序,目前,当一个人创建一个新项目时,... 查看详情

从 ASP.NET Core 中的 API 读取 JWT 令牌

】从ASP.NETCore中的API读取JWT令牌【英文标题】:ReadingJWTTokenfromAPIinASP.NETCore【发布时间】:2019-08-0308:45:10【问题描述】:我的设置:我已经创建并运行了一个WebAPI解决方案,该解决方案针对源(当前为db)执行用户名和密码的身份... 查看详情

从 ASP.NET Core 中的不同 HTTP 标头读取 JWT 令牌

】从ASP.NETCore中的不同HTTP标头读取JWT令牌【英文标题】:ReadJWTtokenfromdifferentHTTPheaderinASP.NETCore【发布时间】:2021-10-2717:33:16【问题描述】:在ASP.NETCoreAPI项目中,我需要验证位于不同于Authorization标头的标头中的另一个JWTBearer令牌... 查看详情

ASP.NET Core 2.1 API JWT 令牌 Session.id 在每次请求时都会更改

】ASP.NETCore2.1APIJWT令牌Session.id在每次请求时都会更改【英文标题】:ASP.NETCore2.1APIJWTtokenSession.idchangesoneveryrequest【发布时间】:2019-02-0220:42:45【问题描述】:我有一个使用Angular4应用程序连接到的asp.netcore2.1API,并通过JWT令牌进行... 查看详情

带有 ASP.NET Core WebAPI 的 Dart 中的令牌刷新并发问题

】带有ASP.NETCoreWebAPI的Dart中的令牌刷新并发问题【英文标题】:TokenrefreshconcurrencyissueinDartwithASP.NETCoreWebAPI【发布时间】:2019-03-1218:09:00【问题描述】:我使用Dart在Flutter中编写了一个简单的应用程序。我使用JWT令牌对用户进行身... 查看详情

如何在 ASP.NET Core 中转储解析的 JWT 令牌?

】如何在ASP.NETCore中转储解析的JWT令牌?【英文标题】:HowtodumpparsedJWTtokeninASP.NETCore?【发布时间】:2021-10-1321:15:35【问题描述】:我正在.NETCore中编写一个API,用于解析由Keycloak颁发的JWT令牌。这个令牌非常多样化。自定义cliam具... 查看详情

如何注销或过期 ASP.NET Core Web API 的 JWT 令牌?

】如何注销或过期ASP.NETCoreWebAPI的JWT令牌?【英文标题】:HowtologoutorexpireJWTtokenforASP.NETCoreWebAPI?【发布时间】:2021-07-2311:06:21【问题描述】:我创建了一个令牌:IdentityOptionsidentityOptions=newIdentityOptions();varclaims=newClaim[]newClaim(identit... 查看详情