identityserver 4 获取当前用户的 access_token

agu*_*agu 5 jwt asp.net-identity asp.net-core identityserver4

我在获取当前用户的 access_token 时遇到问题。这是我的设置:

  • aspnet 核心、身份和 EF 存储中的 QuickstartIdentityServer (QIS)
  • NodeJs 中的 API (API)。针对 QIS 验证标头中的 jwt 令牌。
  • SPA angular 应用程序与 QIS 和 API 配合得很好,超出了这个问题的范围

在 QuickstartIdentityServer (QIS) 站点(用户详细信息页面)的一部分中,我想使用 access_token 调用 API 端点来验证请求。我正在努力从我的 QIS 站点检索当前用户的 access_token。每当我打电话时,HttpContext.GetTokenAsync("access_token")我都会得到一个空值。我看过 IdSrv4 文档的这一部分:https ://identityserver4.readthedocs.io/en/release/quickstarts/5_hybrid_and_api_access.html?highlight = gettokenasync但它似乎适用于 MVC 客户端而不是我自己的身份服务器。

任何人都可以阐明如何获取我用户的 access_token ?

谢谢

编辑

这是尝试更好地解释我的问题的起点:https : //github.com/IdentityServer/IdentityServer4.Samples/tree/release/Quickstarts/6_AspNetIdentity/src/IdentityServerWithAspNetIdentity

从这个 QIS 项目开始,我想获取登录用户的访问令牌。因此,例如,如果我编辑HomeController添加此调用:

public async Task<IActionResult> Index()
{
     var accessToken = await HttpContext.GetTokenAsync("access_token");
     return View(accessToken);
}
Run Code Online (Sandbox Code Playgroud)

然后我就可以在 Auth Header 中使用这个令牌调用我的 NodeJS API。

希望这能更好地解释我的问题。

agu*_*agu 1

因此,我设法使用专用客户端通过我的 API 进行身份验证,使用客户端凭据授予和以下调用来获取 access_token:

        var disco = await DiscoveryClient.GetAsync("http://localhost:5000");
        var tokenClient = new TokenClient(disco.TokenEndpoint, clientId, clientSecret);
        var tokenResponse = await tokenClient.RequestClientCredentialsAsync(scope);
Run Code Online (Sandbox Code Playgroud)

然后我可以将返回的 access_token 添加到 API 的请求标头中tokenResponse

        using(var client = new HttpClient()) {
          client.SetBearerToken(tokenResponse.AccessToken);
          ...
          // execute request
        }
Run Code Online (Sandbox Code Playgroud)

缺点是我无法在 API 端“模拟”当前登录的 IS。