【问题标题】:Getting access token for external provider's APIs in IdentityServer3在 IdentityServer3 中获取外部提供者 API 的访问令牌
【发布时间】:2017-03-29 20:09:06
【问题描述】:

我们设置了身份服务器以访问我们的内部 API。我们有一个新的 JavaScript 客户端,它希望在一个请求中为我们的内部 API 获取 id 和访问令牌,以及一个用于直接从外部身份提供者(在本例中为 Google)调用 API 的访问令牌。我在想如果可以得到它,我可以将它作为我们的 id_token 中的声明返回。

支持吗?我将身份提供者上的响应类型设置为“id_token token”,并且可以看到访问令牌正在返回到 Identity Server,但在任何用户服务方法的上下文中都看不到它。

【问题讨论】:

  • 当您说“直接从外部身份提供商调用 API”时,您是指调用您自己的 API,但使用通过 Google 身份验证获得的令牌?我建议查看一些示例并跟踪它们,这在我尝试设置时帮助了我:github.com/IdentityServer/IdentityServer3.Samples
  • 这个特定的客户端需要调用我们的 API(使用我们的访问令牌)和 Google API(使用 Google 访问令牌)。它始终使用 Google 作为 IDP 进行身份验证。我在样本中没有看到任何涵盖这种情况的内容(这可能表明它不可能/不推荐)

标签: identityserver3 openid-connect


【解决方案1】:

以及用于直接从外部身份提供者(在本例中为 Google)调用 API 的访问令牌

通常,使用 IdentityServer 是为了抽象和保护您的应用,使其不必知道用户使用了哪个上游身份提供程序。但是话虽如此,您可以在登录时在 IdenittyServer 上捕获 google 访问令牌。一种想法是将其放入数据库中,然后在用户服务上的 GetProfileData API 中将其放入发出的声明中返回给应用程序。

【讨论】:

  • 我想知道我可以在管道中的哪个位置拦截来自 Google 的访问令牌 - 例如,它没有传递给 AuthenticateExternalAsync。
  • 在中间件中——它们有触发的事件
  • @Igaud 这是在 Owin 中间件中。在此处查看源代码katanaproject.codeplex.com/SourceControl/latest#src/… Brock Allen - 我们如何捕获令牌?我们可以在 IdentityServer 的什么地方捕获这个值?我希望不要创建 GoogleOAuth2AuthenticationHandler 的子类,因为那会很痛苦!谢谢!
猜你喜欢
  • 2018-07-01
  • 2020-06-08
  • 2018-02-02
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 2014-05-01
  • 1970-01-01
相关资源
最近更新 更多