2017-04-21 59 views
0

你如何使用第三方開放ID連接提供商(如谷歌或微軟),其然後生成一個新的JWT令牌創建一個單頁的應用程序的無縫登錄流程從外部供應商返回的現有供應商不刷新頁面?例如,我希望用戶能夠登錄Google,然後將其帶回我的站點,使用IdentityServer4驗證令牌服務器端,然後提取某些聲明並生成新的JWT(我自己的邏輯) 。與Cookie式外部身份提供商登錄單頁的應用和令牌代表團

是否有從重定向開放身份證提供驗證令牌JWT現有IdentityServer4端點,然後什麼是事後注入我自己的令牌創建流的最佳方法?最終結果是一個理想的cookie,其中包含我的新JWT令牌,現在將根據我的SPA所做的每個http請求發送該令牌。

我最好的猜測是使用OIDC JS客戶端和設置用戶經理谷歌,例如:

var mgr = new Oidc.UserManager({ 
    authority: "https://accounts.google.com/.well-known/openid-configuration", 
    client_id: "---", 
    redirect_uri: "http://localhost:60720/account/callback", 
    response_type: "id_token token", 
    scope: "openid profile email", 
    post_logout_redirect_uri: "http://localhost:60720/spa", 
}); 

/*...*/ 
mgr.signinRedirect(); 

但是,重定向,我需要谷歌的cookie發送給我的控制器,然後它將使用IdentityServer驗證令牌,提取一些類似用戶ID的聲明,然後爲我的API生成一個新令牌。這假定我使用IdentityServer來託管我自己的身份提供者。我如何使用IdentityServer4完成最後一部分?

因爲重定向調用回調函數後回來後生成令牌這就是簡單的用MVC模式做。在SPA中,應該有最小限度的重定向,理想的情況是不顯示彈出窗口以允許用戶登錄,然後SPA接管。我一直無法弄清楚如何從一個外部身份提供者重定向到我的IdentityServer4 auth服務器或MVC服務器,並生成一個新的令牌,並最大限度地破壞了事實上的配置。

谷歌建議,服務器必須驗證令牌(https://developers.google.com/identity/protocols/OAuth2UserAgent#validate-access-token)。一個可能的解決方案是在驗證後在重定向回調中生成我的新令牌。但是,IdentityServer4是否應驗證令牌,還是必須在服務器上自己執行此操作? IdentityServer4在令牌驗證中扮演什麼角色?我不想自己手動編碼這一步。

+0

你最終解決了這個問題嗎?怎麼樣 ? –

回答

0

我結束了創建與標識服務器端點我自己交付式只是交換第三方身份驗證cookie到內部JSON-承載基於令牌。

相關問題