2016-11-15 55 views
3

我们设置了Identity Server以访问我们的内部API。我们有一个新的JavaScript客户端,希望在一个请求中为我们的内部API获取标识和访问令牌,以及直接从外部标识提供者(本例中为Google)调用API的访问令牌。我在考虑是否有可能得到它,我可以将它作为我们id_token中的声明返回。在IdentityServer3中获取外部提供者API的访问令牌

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

+0

当你说“直接从外部身份提供者调用API”时,你的意思是调用你自己的API,但使用通过Google认证获得的令牌吗?我建议看看一些示例,并通过它们帮助我尝试设置此示例:https://github.com/IdentityServer/IdentityServer3.Samples – Remotec

+0

此特定客户端需要调用我们的API (使用我们的访问令牌)和Google API(使用Google访问令牌)。它总是使用Google作为IDP进行身份验证。我没有看到样本中的任何内容来说明这种情况(这可能是一个不可能/不推荐的指示) – lgaud

回答

1

,并为直接从外部身份提供商调用API的访问令牌(在这种情况下,谷歌)

通常使用IdentityServer的意思是抽象的,不必知道保护你的应用程序,它用户使用的上游身份提供者。但说了这些,你可以在IdenittyServer登录时捕获谷歌访问令牌。一个想法是将其放入数据库,然后在用户服务的GetProfileData API中将其发布到应用程序的发布声明中。

+0

我想知道在管道的哪个位置我可以拦截来自Google的访问令牌 - 它没有通过例如AuthenticateExternalAsync。 – lgaud

+0

在中间件 - 他们有事件发生在 –

+0

@Igaud这是Owin中间件。请参阅此处的源代码http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Security.Google/GoogleOAuth2AuthenticationHandler.cs Brock Allen - 我们如何捕获令牌?在IdentityServer中,我们可以捕获这个值吗?我希望不要创建GoogleOAuth2AuthenticationHandler的子类,因为这会很痛苦!谢谢! –