2015-01-12 37 views
0

我可以通過我的網站上的Facebook和Google進行登錄。這是使用OAuth2完成的。跟蹤客戶端上的OAuth 2提供商頁面

我使用相同的重定向URL,無論用戶是從Facebook還是谷歌返回,並通過狀態字段中的提供者名稱。這是跟蹤提供商的推薦方式嗎?否則,如果我不知道令牌是從哪個提供者發出的,我不知道該使用哪個令牌。

有沒有其他的優選方法來完成這個?

+0

我會使用略有不同的網址。即使是查詢字符串參數也可以。 – ceejayoz

+0

所以我的redirectURL可以包含一個查詢字符串參數? –

+0

當然,爲什麼不呢? – ceejayoz

回答

1

state參數應該是一個不透明的值,不能被攻擊者猜出,因爲它沒有被修改保護。如果您需要跟蹤狀態,您應該使用state參數參考,但參數本身應該隨機化和/或加密。在state參數中以純文本存儲提供程序標識符並不安全。用戶可以自己修改state參數,或者攻擊者可以利用他們選擇的值創建授權請求。

跟蹤提供程序的方法是將其存儲在後端會話狀態中,並生成對通過參數state傳遞的會話/狀態的引用。爲了防止跨站點請求僞造,您還應該保留一些加密/隨機Cookie,將狀態綁定到瀏覽器。這是更詳細的描述:https://tools.ietf.org/html/rfc6749#section-10.12

附錄:

一個與使用OAuth 2.0 +供應商特定擴展登錄的問題,也正是這樣的:你不能在對工作的方式建立的提供者和使用者身份所有供應商採用統一和通用的方式。在你的情況下,你必須先了解提供者,然後才能與之進行合理的交互。輸入OpenID Connect:它是OAuth 2.0的擴展配置文件,以標準方式爲您提供登錄語義。它會給你一個可驗證的JSON對象(JWT),它具有標準化的值,告訴你誰是提供者(iss)和用戶是誰(sub)。

谷歌登錄已經遷移到OpenID Connect,微軟和Salesforce等其他公司一樣,希望Facebook能夠跟進。