適用於 IoT 整合的 OAuth 2.0 裝置流程
若要整合在裝置上執行的應用程式,而這些裝置的輸入或顯示功能有限,例如智慧電視、家電和其他 IoT 裝置,請使用 OAuth 2.0 裝置流程。指令行應用程式也可以使用此流程。使用者可以透過在具備更進階輸入功能的裝置上 (例如,桌上型電腦或行動裝置) 存取瀏覽器,以將這些應用程式連接至 Salesforce。
必要版本
| 提供版本:Salesforce Classic 與 Lightning Experience |
| 提供版本:所有版本 |
例如,客戶在夜晚離開時,使用藍牙裝置控制家中燈光。您可以為藍牙裝置建立連線應用程式來啟用此流程。
- 使用者會在其行動裝置上開啟藍牙應用程式,並按一下「開啟燈光」。
- 連線應用程式會向 Salesforce 權杖端點張貼要求。
- Salesforce 會確認此要求並傳回人類可讀的使用者代碼、驗證 URL 和裝置代碼。
- 藍牙應用程式會顯示裝置代碼並指示使用者在指定的驗證 URL 中輸入該代碼。此應用程式也會開始輪詢 Salesforce 權杖端點來進行授權。
- 使用者會按一下驗證 URL 的連結並輸入此代碼。
- 使用者會授權應用程式來存取其受保護的資料,在此個案中即為其居家位置。
- Salesforce 會將存取和重新整理權杖傳送至連線應用程式。
- 藍牙應用程式就可以存取使用者的居家位置並開啟燈光。
讓我們來逐步完成此授權流程中的步驟。
裝置要求授權
若要起始授權流程,此裝置會透過連線應用程式,向 Salesforce 權杖端點張貼授權要求。
例如:
POST /services/oauth2/token HTTP/1.1
Host: login.salesforce.com
Content-Type: application/x-www-form-urlencoded
response_type=device_code&
client_id=3MVG9PhR6g6B7ps7TTI4cP7Mppg3l7tu.MRAYULyVqcmA9hGLpHiiS.Q7rO9yjlmffiBUM6tFpYAlXEkRjHb9&scope=api在要求中包含這些參數。
| 參數 | 描述 |
|---|---|
Request Header
|
要求標頭包含以下資訊:
|
response_type
|
連線應用程式要求的 OAuth 2.0 授與類型。此流程的值必須是 device_code。 |
client_id
|
連線的應用程式取用者金鑰。若要存取取用者金鑰,請在「應用程式管理員」中尋找連線的應用程式,然後從下拉式清單選取「檢視」。然後按一下「管理取用者細節」。有時系統會提示您在檢視消費者金鑰前先驗證身分。 |
scope
|
選擇性。權限,其會定義連線應用程式可存取的受保護資源類型。您在建立連線的應用程式時將範圍指派至其中,且在授權流程期間這些範圍會隨附 OAuth 權杖。若您並未包含此參數,則會要求指派給連線應用程式的全部範圍。傳入此參數的範圍必須為註冊範圍的子集。如需有效的參數,請參閱 OAuth 範圍。 |
Salesforce 傳回驗證代碼
確認此要求後,Salesforce 會傳回人類可讀的使用者代碼、驗證 URL 和裝置代碼。
此範例回應會傳回這些成功狀態代碼為 200 的值。
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
"device_code":"M01WRzlQaFI2ZzZCN3BzN1RUSTRjUDdNcHBnM2w3dHUuTVJBWVVMeVZxY21BOWhHTHBIaWlTLlE3ck85eWpsbWZmaUJVTTZ0RnBZQWxYRWtSakhiOTsxMC4yMi4zNC45MjsxNDc3Njc0NDg3NTA1O1gxRDlTRUVU",
"user_code":"X1D9SEET",
"verification_uri":"https://acme.my.salesforce.com/setup/connect",
"interval":5
}
回應中會包含以下參數。
| 參數 | 描述 |
|---|---|
Response Header
|
回應標頭包含以下資訊:
|
device_code
|
裝置的驗證代碼。此代碼的有效時間為 10 分鐘。代碼可包含大寫字母、小寫字母和數字。 Salesforce 可以隨時變更我們設定裝置代碼格式的方式。當您開發使用此流程的整合時,請勿假設裝置代碼格式與長度。 |
user_code
|
一般使用者的驗證代碼,傳送形式為 8 位數的英數代碼。使用者必須在驗證 URL 中輸入此代碼。此代碼的有效時間為 10 分鐘。 |
verification_uri
|
授權伺服器上一般使用者驗證 URL。使用者必須在驗證 URL 中輸入此使用者代碼。 透過「我的網域」登入 URL 或 Experience Cloud 網站 URL 進行驗證時,verification_uri 會反映起始流程的 URL。例如,如果裝置將權杖要求傳送至 https://acme.my.salesforce.com/services/oauth2/token,則 verification_uri 為 https://acme.my.salesforce.com/setup/connect。 或者,您可以將 |
interval
|
最小秒數,我們建議在向權杖端點輪詢要求期間等待的時間。 |
裝置輪詢權杖端點時使用者驗證與授權
裝置上的用戶端應用程式會指示使用者以電腦或行動裝置造訪驗證 URL 並輸入使用者代碼。使用者開啟瀏覽器、瀏覽至驗證 URL 並輸入在裝置上顯示的代碼。如果代碼有效,則使用者會根據需要而登入。在成功登入後,使用者會允許裝置存取 Salesforce 帳戶資料。
同時,在顯示使用者代碼和驗證 URL 後,裝置上的用戶端應用程式會重複輪詢權杖端點。輪詢會確認使用者是否授與存取權,以及授權伺服器是否核發存取權杖。
以下為輪詢要求範例:
POST /services/oauth2/token HTTP/1.1
Host: login.salesforce.com
Content-Type: application/x-www-form-urlencoded
grant_type=device&
client_id=3MVG9PhR6g6B7ps7TTI4cP7Mppg3l7tu.MRAYULyVqcmA9hGLpHiiS.Q7rO9yjlmffiBUM6tFpYAlXEkRjHb9&code=M01WRzlQaFI2ZzZCN3BzN1RUSTRjUDdNcHBnM2w3dHUuTVJBWVVMeVZxY21BOWhHTHBIaWlTLlE3ck85eWpsbWZmaUJVTTZ0RnBZQWxYRWtSakhiOTsxMC4yMi4zNC45MjsxNDc3Njc0NDg3NTA1O1gxRDlTRUVU除了標頭外,輪詢要求還包含這些參數。
| 參數 | 描述 |
|---|---|
grant_type
|
此流程的值必須是 device。 |
client_id
|
連線的應用程式取用者金鑰。若要存取取用者金鑰,請在「應用程式管理員」中尋找連線的應用程式,然後從下拉式清單選取「檢視」。然後按一下「管理取用者細節」。有時系統會提示您在檢視消費者金鑰前先驗證身分。 |
code
|
授權伺服器會在成功驗證後建立授權代碼,並將其傳遞至用戶端,該授權代碼為短暫的權杖。用戶端會將授權代碼傳送至授權伺服器來取得存取權杖,或者是重新整理權杖。 |
Salesforce 授與存取權杖
如果使用者授與存取權,則 Salesforce 會以成功訊息和存取權杖與其他值來回應。例如:
{
"access_token": "00DD00000008Uw2!ARkAQGppKf6n.VwG.EnFSvi731qWh.7vKfaJjL7h49yutIC84gAsxMrqcE81GjpTjQbDLkytl2ZwosNbIJwUS0X8ahiILj3e"
"refresh_token": "your token here"
"signature": "hJuYICd2IHsjyTcFqTYiOr8THmgDmrcjgWaMp13X6dY="
"scope": "api"
"instance_url": "https://yourInstance.salesforce.com"
"id": "https://login.salesforce.com/id/00DD00000008Uw2MAE/005D0000001cAGmIAM"
"token_type": "Bearer"
"issued_at": "1477674717112"
}範例回應中包含這些參數。
| 參數 | 描述 |
|---|---|
access_token
|
OAuth 權杖,連線應用程式會使用此權杖來代表用戶端應用程式,要求對受保護資源的存取權。範圍格式的其他權限可能會隨附存取權杖。 |
refresh_token
|
從 Web 伺服器、使用者代理程式或混合式應用程式權杖流程所取得的權杖。這個值是密碼。採取適當的措施來保護此值。只有在連線應用程式使用 refresh_token 範圍設定時,才會傳回此參數。 |
signature
|
以 client_secret 簽署的 Base64 編碼 HMAC-SHA256 簽章。簽章可以包含串連的識別碼和 issued_at value,您可以用來確認身分 URL 自伺服器傳送後未變更。 |
scope
|
與存取權杖相關聯的範圍。 範圍會進一步定義用戶端可存取的受保護資源類型。您在建立連線的應用程式時將範圍指派至其中,且在授權流程期間這些範圍會隨附 OAuth 權杖。 如需有效的參數,請參閱 OAuth 範圍。 |
instance_url
|
指示使用者組織例項的 URL。例如:https://yourInstance.salesforce.com/. |
id
|
身分 URL,此 URL 可用來識別使用者與查詢使用者的詳細資訊。請參閱身分 URL。 |
token_type
|
Bearer 權杖類型,用於包含存取權杖的所有回應。 |
issued_at
|
建立簽章時的時間戳記 (單位為毫秒)。 |
