【发布时间】:2018-11-21 04:39:41
【问题描述】:
我无法获取当前用户的 access_token。 这是我的设置:
- 在 aspnet 核心、身份和 EF 存储中的 QuickstartIdentityServer (QIS)
- NodeJs 中的 API (API)。根据 QIS 验证标头中的 jwt 令牌。
- 与 QIS 和 API 配合使用的 SPA Angular 应用程序超出了本问题的范围
在 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。
希望这能更好地解释我的问题。
【问题讨论】:
-
请提供一些代码如何设置您的 IdentityServer 或您正在使用哪个 QIS(github 链接?)。另外,您在请求链的哪个位置尝试访问 access_token?例如。 SPA 调用 API,它返回一个重定向到 QIS 中的 UserDetails 页面。这个调用是在 Get 还是 Post 中?提供一些代码将帮助我们回答您的问题。
-
您可能需要考虑通过扩展授权使用委托。 identityserver4.readthedocs.io/en/release/topics/….
-
Identity Server 仅为客户端(而不是自身)发出
access_token。我相信它会发出id_token供自己使用,但不确定它是否存储在 cookie 中。您可以通过在 QIS 项目中尝试var token = await HttpContext.GetTokenAsync("id_token");来检查它是否存在。 -
你说得对,看来我必须创建一个带 ClientCredentials 授权类型的专用客户端。我本来希望“模拟”当前用户来调用 API,但我将通过服务到服务身份验证来解决这个问题。谢谢你的帮助。我会尽快发布我的解决方案
标签: asp.net-core asp.net-identity jwt identityserver4