2016-11-15 56 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的子類,因爲這會很痛苦!謝謝! –