SAP Commerce Cloud OAuth 实现介绍
Oauth2
oauth2 core extension 已經(jīng)取代了 webservicescommons/oauthauthorizationserver 擴(kuò)展。 它將 HTTP 端點(diǎn)公開為 Authorization 服務(wù)器。 它沒有引入任何新的重要功能。
To enable the authorization server, add the oauth2 extension entry into the localextensions.xml file:
<extension name="oauth2" />支持的配置:
- oauth2.refreshTokenValiditySeconds:Refresh token time-to-live,默認(rèn)30天
- oauth2.accessTokenValiditySeconds: Access token time-to-live,默認(rèn)12小時
Authorization Server
The authorization server exposes two endpoints:
- /oauth/authorize
- /oauth/token
在 Chrome 開發(fā)者工具 local storage 里把 auth token 刪除之后,隨便在 UI 上再操作一下,會重新觸發(fā) token 請求:https://20.51.210.49:9002/authorizationserver/oauth/token
下圖是新的 token 請求的 form data 字段,輸入字段:
下圖是服務(wù)器返回的新的 Access Token 和 Refresh token:
OAuth2 里的幾個角色
-
資源所有者:可以授予對受保護(hù)資源的訪問權(quán)限的實(shí)體。 當(dāng)資源所有者是個人時,則稱為:最終用戶。
-
資源服務(wù)器:托管受保護(hù)資源的服務(wù)器,能夠使用訪問令牌接受和響應(yīng)受保護(hù)資源請求。
-
客戶端:代表資源所有者并經(jīng)其授權(quán)發(fā)出受保護(hù)資源請求的應(yīng)用程序。術(shù)語客戶端并不意味著任何特定的實(shí)現(xiàn)特征(例如,應(yīng)用程序是否在服務(wù)器、桌面或任何其他特定設(shè)備上運(yùn)行)。
-
授權(quán)服務(wù)器:服務(wù)器在成功驗(yàn)證資源所有者并獲得授權(quán)后向客戶端頒發(fā)訪問令牌。
-
授權(quán)服務(wù)器在 Oauth2 中定義,示例資源服務(wù)器在 ycommercewebservices Extension 和 ywebservices Extension 中配置。
OAuth 2.0 帶有四個流程。 SAP Commerce 支持所有這些:
- 由于 Resource Owner Password Flow 持有用戶的 username 和 password,因此安全性較低,不適用于第三方應(yīng)用程序。
如果 Web 應(yīng)用程序可以保留 client_secret,則最好使用授權(quán)代碼流 Authorization Code Flow。
隱式流 Implicit Flow 不需要任何授權(quán)令牌。 因此,它更容易但不太安全。 在瀏覽器中運(yùn)行的 JavaScript 不太受信任,并且不會發(fā)出刷新令牌。 這適用于需要臨時訪問的客戶端 Web 應(yīng)用程序。
客戶端憑據(jù)流 Client Credentials Flow 使客戶端可以訪問其擁有的資源。
根據(jù)您的客戶端應(yīng)用程序,您需要選擇合適的流程。您還需要禁用您不使用的其他流。
Resource Owner Password Flow
此流程有點(diǎn)類似于基本身份驗(yàn)證 basic authentication 流程,但它有一些好處。 它通常用于受信任的移動應(yīng)用程序,例如移動 Android 或 iOS 應(yīng)用程序。 該流程包括將用戶的 username 和 password 發(fā)送到令牌端點(diǎn)以換取 <access_token>。 服務(wù)器端使用刷新令牌回復(fù)是可選的。 移動 client 否則必須保留用戶名和密碼以便長期訪問。
流需要 username 和 password 來獲得 access_token。 但是,請記住,API 提供程序提供結(jié)合了 refresh_token 的訪問令牌。 因此客戶端不需要保存用戶名和密碼,而只需要傳遞這些信息。 access_token 和 refresh_token 需要在本地持久化,這比存儲用戶憑證要好。 下圖描述了此流程。
所呈現(xiàn)流程的詳細(xì)說明:
步驟 (A):client 接收 username 和 password。在此步驟中,用戶將此信息直接輸入到客戶端應(yīng)用程序中。請注意,用戶必須有辦法將應(yīng)用程序識別為他們可以信任的官方應(yīng)用程序。
步驟 (B):接下來,客戶端應(yīng)用程序向授權(quán)服務(wù)器發(fā)出請求,例如 /oauth/token 端點(diǎn)。 client_id 和 client_secret 可以通過兩種方式發(fā)送:在常規(guī)的基本身份驗(yàn)證請求標(biāo)頭中,或作為在請求有效負(fù)載(即請求正文)中傳遞的參數(shù)的一部分。查看要傳遞的參數(shù)列表:
client_id 和 client_secret:作為參數(shù)或作為基本身份驗(yàn)證標(biāo)頭傳遞。基本身份驗(yàn)證意味著 client_id 和 client_secret 被視為用戶名和密碼,使用冒號 (😃 連接,然后進(jìn)行 Base64 編碼。然后將此值用作授權(quán)請求標(biāo)頭的一部分,例如: Authorization: Basic Base64-encoded username:password
username 和 password:資源所有者的憑據(jù),用戶的真實(shí)憑據(jù)。
grant_type:此流程需要設(shè)置為 password。
步驟?:認(rèn)證服務(wù)器返回帶有可選的refersh_token的access_token。
Refreshing an Expired Access Token
需要刷新下發(fā)的access_token。 如果不刷新這些令牌,client 必須記住用戶憑據(jù),這是一種不太安全的方法。 提供訪問令牌并刷新令牌意味著客戶端只需記住令牌。
更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結(jié)
以上是生活随笔為你收集整理的SAP Commerce Cloud OAuth 实现介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 山东招远文旅局出奇招:单手拿起50斤金砖
- 下一篇: 机构:AMOLED面板降价快 三星Dis