identityserver 4获取当前用户的access_token

时间:2018-06-11 21:06:56

标签: asp.net-core asp.net-identity jwt identityserver4

我无法获取当前用户的access_token。 这是我的设置:

  • aspnet核心,身份和EF存储中的QuickstartIdentityServer(QIS)
  • NodeJs中的API(API)。根据QIS验证标头中的jwt令牌。
  • 适用于QIS和API的SPA角度应用,不在此问题的范围内

在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);
}

然后,我可以在Auth Header中使用此令牌调用我的NodeJS API。

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

1 个答案:

答案 0 :(得分:0)

因此,我设法使用客户端凭据授权使用专用客户端验证我自己的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);

然后我可以在tokenResponse中返回我的请求标头API中返回的access_token:

        using(var client = new HttpClient()) {
          client.SetBearerToken(tokenResponse.AccessToken);
          ...
          // execute request
        }

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