2015-05-11 57 views
0

我試圖進行如何正確識別哪個提供程序返回授權請求是由啓動。我看到三種方法:如何識別oauth2 redirect_uri回調的提供者?

  • 使用提供商專用的redirect_uri回調URI。 /oauth2/<provider-name>/callback
  • state參數莫名其妙
  • 商店掛起提供商ID /名稱在網絡會話
  • 嘗試驗證響應與所有使用提供商
  • 編碼提供商ID /名稱

我讀過部分OAuth2規範,但我找不到任何討論它的地方。查看其他客戶端實現,它似乎是提供程序特定的URI是最常見的解決方案。我錯過了什麼嗎?

回答

1

客戶端可能不是多租戶的,並且與一個授權服務器緊密集成,因此不需要存儲提供商標識符,因爲只有一個固定的標識符。這可能是沒有明顯解決方案的原因。

像您的多供應商客戶端應存儲供應商標識符作爲state的一部分。這是因爲state應該受到保護,而供應商特定的redirect_uri不是。人們可以針對提供者B的回調來爲提供者A播放訪問令牌,從而打敗提供者特定回調的目的。

state可以通過引用服務器狀態或加密的cookie來保護,也可以通過狀態參數的自包含加密結構化值的形式的值來保護,因此可以是安全的機制來存儲提供的標識符。

+0

感謝您的回答!我正在實施OpenID連接,所以我正在閱讀OAuth2如何工作。通過「播放訪問令牌」,你的意思是與響應類型代碼一起使用的代碼?但在OpenID連接的情況下可以依賴令牌驗證嗎?假設您區分使用狀態或不同回調的供應商,以瞭解獲取令牌的位置以及要使用的共享密鑰。 –

+0

是的,在OpenID Connect中,可以通過查看'id_token'中的'iss'聲明來識別(並驗證)提供者。是的,在談論基本客戶端配置文件時,播放將使用'code'完成,在隱式客戶端配置文件中它將是'access_token'。 –