2017-04-21 19 views
0

在使用IdentityServer4和OIDC-客戶端的SPA環境中,使用多個外部提供商進行以下操作的最安全方法是什麼?使用OIDC客戶端和IdentityServer4交換具有內部身份提供商令牌的外部身份提供商令牌

實質上,如果用戶使用Google登錄,我需要登錄到我的內部系統並創建新的聲明。這必須完成服務器端的第三方回調。在SPA中,IdentityServer4中最安全的配置是什麼?

流量:

  1. 用戶登錄到谷歌在SPA(調用oidcManager.signinRedirect)
  2. 谷歌重定向到SPA(CAL新Oidc.UserManager()signinRedirectCallback)
  3. 發送JWT回IdentityServer4(但使用哪種機制?)。 如果用戶確實存在於內部系統中,則返回一個新的JWT,其中包含OIDCManager可以管理的自定義聲明(替換外部聲明)。 如果內部系統中不存在用戶,則重定向到資源所有者憑據流接管的登錄頁面。

對於#3,我喜歡使用IdentityServer4已經提供的,而不是滾動我自己的端點。這種情況很容易支持嗎?

從本質上講,我需要完成這一點,但不知道IdentityServer4將如何處理這種情況:

new Oidc.UserManager().signinRedirectCallback().then(function (externalUser) { 
    //TODO: pass externalUser to IdentityServer4 endpoint where it's exchanged for internal user 
    window.location = "../Spa/Index"; 
}).catch(function (e) { 
    console.error(e); 
}); 

除了登錄流程,什麼是做與多個外部提供商令牌刷新最安全的方法。我假設我需要定期刷新外部令牌,以防我自己的內部令牌過期。

回答

0

我們有一個類似的項目,我們的用戶可以通過Google和Facebook登錄。我們通過IdentityServer添加了Google和Facebook SignIn,並將ID和電子郵件地址存儲在客戶端應用程序發送到資源服務器(API)的access_token內,以便資源服務器知道哪個用戶已登錄。

所以我建議使用IdentityServer4內置的Google SignIn,並將詳細信息發送到資源服務器(API)。