2016-09-17 73 views
3

我有一個使用春季啓動oauth2.0建立一個auth服務器,並遵循david_syer模型。春季啓動oauth2.0和春季安全:如何授予(權限),以通過Facebook或鬆懈用戶登錄

我的身份驗證服務器不如下 - 通過像谷歌第三方OAuth提供商

  1. 讓用戶登錄,或讓用戶使用的用戶名和密碼,我們的服務器上創建他的賬戶,並生成令牌。

  2. 所以,當用戶使用外部的OAuth像谷歌登錄,然後我簡單地存儲令牌和相同的(谷歌)的令牌傳遞給我的UI應用程序訪問資源的API服務器。我有一個驗證過濾器來驗證令牌並允許api訪問。

  3. 當用戶使用用戶名和密碼獲取令牌時,我們存儲用戶及其權限併爲他生成令牌。現在,UI使用我們的auth服務器生成的令牌訪問資源api服務器。

現在的問題是

  1. 這是使用外部API令牌,並使用相同的訪問我們的資源API服務器的正確方法是什麼?
  2. 如何向使用第三方oauth提供商註冊的用戶添加權限,因爲我沒有爲他們添加用戶輸入和權限?

因此,如果用戶來自永久供應商,那麼加載用戶和用戶權限(來自UserDetailsS​​ervice的loadUserByUsername())的spring安全將不會有任何問題。

回答

3

我對第2步有建議: 用戶使用google身份驗證並重定向回到您的應用程序頁面後,在您的服務器上執行聲明轉換並生成您擁有的身份服務器發出的自己的令牌。

原因是您將能夠提供具體的索賠和索賠名稱不一定需要匹配。

這樣您就可以始終在客戶端應用程序上始終驗證您自己的令牌。因此,可以說用戶使用Facebook而不是Google,甚至在這種情況下,您將分配您自己的令牌,您無需驗證來自不同第三方身份服務器的令牌。

這樣,您的身份服務器信任Facebook,Google提供的令牌,您的應用程序將只信任您的身份服務器,因此您的應用程序無需知道IDP發佈令牌的內容。

通過我上面提出的方法,您甚至可以自行修改用戶的聲明,而無需依賴第三方標識服務器提供聲明。

+0

有道理Mitra Ghorpade。 – Ananda