【问题标题】:IdentityServer4 get access tokenIdentityServer4 获取访问令牌
【发布时间】:2018-12-11 03:11:05
【问题描述】:

是否可以从IExtensionGrantValidatorICustomTokenRequestValidator 实现中获取生成的访问令牌,或者我必须实现另一个验证器?我找不到任何可以从中获取访问令牌的属性。

【问题讨论】:

  • 你想做什么?您在什么情况下尝试检索令牌?
  • @ChrisPratt 我有两种情况:1. 我将 Web 请求发送到令牌端点,在那里我向客户提供一些额外的声明,2. 我从站点重定向到 IS4 登录页面,在那里我进行身份验证和重定向回到现场。在这两种情况下,我都需要记录生成的访问令牌。我找不到如何获取访问令牌的任何信息。

标签: c# .net-core identityserver4 asp.net-core-2.0


【解决方案1】:

好吧,在最初从 IdentityServer 检索它的上下文中,令牌位于返回的 TokenResponse 实例的 AccessToken 属性中。

在通过 IdentityServer 进行身份验证的 ASP.NET Core 应用程序中,它来自 IdentityServer 的事实是无关紧要的。通常,要检索访问令牌,您可以使用:

using Microsoft.AspNetCore.Authentication;

...

var token = await HttpContext.GetTokenAsync("access_token");

【讨论】:

  • AccessToken 属性只能在客户端使用。 await HttpContext.GetTokenAsync("access_token"); 在我的上下文中总是返回 null。
  • @developer 如果你得到 null 那么客户端配置肯定有问题。您使用的是什么身份验证中间件?
【解决方案2】:

这是一个解决方法,deps:IdentityServer4.AccessToken Validation 2.7 + IdentityModel 3.10

    services.AddScoped(provider =>
                {
                    var httpService = provider.GetService<IHttpContextAccessor>();

                    var token = httpService.HttpContext.Request.Headers["Authorization"][0].Remove(0, "Bearer ".Length);
                    var userGuid = Guid.Parse(httpService.HttpContext.User.FindFirst("sub").Value);

                    // Use token 

                });

【讨论】:

    猜你喜欢
    • 2019-05-15
    • 2018-09-23
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2018-10-26
    • 2018-06-14
    • 2020-12-09
    相关资源
    最近更新 更多