將「OpenID Connect 提供者」配置成啟用二方 (2-legged) OAuth 要求
典型的 OAuth 流程由三「方 (leg)」組成,或由用戶端與授權伺服器之間的互動階段組成。 在二方 (2-legged) OAuth 實務中,用戶端使用預先授權的範圍,因此不需要與使用者互動,因而不需要執行典型流程中的其中一方。具體來說,使用者不需要接受授權伺服器的鑑別,或是同意共用所要求範圍指定的資訊。反倒是所有所要求的 scope 參數都會視為預先授權,且會自動新增到要求記號中,之後再將要求記號傳送給授權伺服器。
開始之前
關於這項作業
在採取二方 (2-legged) 或二階段的實務中,Open ID Connect 用戶端可以傳送二方 (2-legged) HTTP 要求,且其 grant type 是 client_credential 或 resource owner password。這些要求不會行經授權端點,因此,不會提供範圍同意表單讓使用者確認和核准所要求的範圍;不過,「OpenID Connect 提供者」仍需要處理其 access_token 內容中的授權範圍。
如果 Liberty 伺服器是配置成「OpenID Connect 提供者」,並且有能力處理二方 (2-legged) OAuth 要求,則會使用下列準則來核准預先授權的範圍:
- 如果要求的 grant_type 參數值是 client_credential 或 resource owner password,且要求是 OAuth 2.0 要求,則會核准要求中所定義的所有範圍,並將這些範圍複製到存取記號的內容中。這是 OAuth 2.0 特性的現有行為。
- 如果要求是 OpenID Connect 要求或 JWT 記號 OAuth,則會使用下列準則:
- 如果要求中沒有指定 scope 參數,則「OpenID Connect 提供者」不接受該要求。
- 所要求的範圍必須存在於用戶端配置 scope 屬性所定義的範圍清單中,也必須指定在用戶端配置的 preAuthorizedScope 清單中。
這項作業示範如何配置 Liberty 伺服器,使其擔任「OpenID Connect 提供者」來啟用二方 (2-legged) OAuth 要求。
程序
如果要為用戶端指定預先授權的範圍清單,請在 server.xml 檔中,將必要範圍新增至適當 <oauthProvider> 元素內之用戶端配置的 scope 和 preAuthorizedScope 屬性中。在顯示的範例中,範圍 profile 和 email 都有資格指定在「OpenID Connect 提供者」所傳回的存取記號範圍清單中。不會將 phone 範圍視為預先授權的範圍,這是因為 preAuthorizedScope 清單中沒有它。
<oauthProvider id="OAuthConfigSample" ...>
....
<localStore>
<client name="client01" secret="{xor}..."
displayname="client01"
scope="profile email phone"
preAuthorizedScope="profile email"
enabled="true"/>
....
</localStore>
</oauthProvider>
註: 如果所要求的範圍未列在用戶端配置的 scope 屬性中,則傳回的存取記號範圍中會省略它。如果所要求的範圍列在用戶端配置的 scope 屬性中,但是不包含在用戶端配置的 preAuthorizedScope 清單中,它會在「OpenID Connect 提供者」的回應中觸發 invalid_grant 錯誤。