Loading
識別使用者與管理存取
適用於 IoT 整合的 OAuth 2.0 裝置流程

適用於 IoT 整合的 OAuth 2.0 裝置流程

若要整合在裝置上執行的應用程式,而這些裝置的輸入或顯示功能有限,例如智慧電視、家電和其他 IoT 裝置,請使用 OAuth 2.0 裝置流程。指令行應用程式也可以使用此流程。使用者可以透過在具備更進階輸入功能的裝置上 (例如,桌上型電腦或行動裝置) 存取瀏覽器,以將這些應用程式連接至 Salesforce。

必要版本

提供版本:Salesforce Classic 與 Lightning Experience
提供版本:所有版本
備註
備註 自 Spring ‘26 起,系統會限制建立連線的應用程式。您可以在 Spring ‘26 期間和之後繼續使用現有連線的應用程式。不過,我們建議改用 外部用戶端應用程式。如果您必須繼續建立連線的應用程式,請連絡 Salesforce 支援。

請參閱 Spring ‘26 中無法再建立新的連線應用程式以取得詳細資料。

例如,客戶在夜晚離開時,使用藍牙裝置控制家中燈光。您可以為藍牙裝置建立連線應用程式來啟用此流程。

  1. 使用者會在其行動裝置上開啟藍牙應用程式,並按一下「開啟燈光」。
  2. 連線應用程式會向 Salesforce 權杖端點張貼要求。
  3. Salesforce 會確認此要求並傳回人類可讀的使用者代碼、驗證 URL 和裝置代碼。
  4. 藍牙應用程式會顯示裝置代碼並指示使用者在指定的驗證 URL 中輸入該代碼。此應用程式也會開始輪詢 Salesforce 權杖端點來進行授權。
  5. 使用者會按一下驗證 URL 的連結並輸入此代碼。
  6. 使用者會授權應用程式來存取其受保護的資料,在此個案中即為其居家位置。
  7. Salesforce 會將存取和重新整理權杖傳送至連線應用程式。
  8. 藍牙應用程式就可以存取使用者的居家位置並開啟燈光。

讓我們來逐步完成此授權流程中的步驟。

  1. 裝置要求授權
  2. Salesforce 傳回驗證代碼
  3. 裝置輪詢權杖端點時使用者驗證與授權
  4. 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

在要求中包含這些參數。

重要
重要 開發 OAuth 整合時,請一律在 POST 要求內文或要求標題中傳遞敏感資訊。請勿在 URL 查詢字串中使用 GET 參數傳遞敏感資訊。敏感資訊包括 (但不限於) 使用者名稱、密碼、OAuth 權杖、用戶端密碼,以及任何個人可識別資訊。如需安全性最佳作法的詳細資訊,請參閱《安全編碼指南》中的儲存敏感資料
參數 描述
Request Header

要求標頭包含以下資訊:

  • Salesforce OAuth 2.0 權杖端點。連線應用程式會將 OAuth 權杖要求傳送至此端點。
  • 授權伺服器。
  • 要求的內容類型。
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":"M01WRzlQaFI2ZzZCN3BzN1RUSTRjUDdNcHBnM2w3dHUuTVJBWVVMeVZxY21BOWhHTHBIaWlTLlE3ck​85eWpsbWZmaUJVTTZ0RnBZQWxYRWtSakhiOTsxMC4yMi4zNC45MjsxNDc3Njc0NDg3NTA1O1gxRDlTRUVU",
"user_code":"X1D9SEET",
"verification_uri":"https://acme.my.salesforce.com/setup/connect",
"interval":5
}

回應中會包含以下參數。

參數 描述
Response Header

回應標頭包含以下資訊:

  • 200 成功狀態代碼
  • 回應的內容類型
  • 指示資料並未儲存於快取中
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_urihttps://acme.my.salesforce.com/setup/connect

或者,您可以將 prompt 參數新增至您的 verification_uri

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=M01WRzlQaFI2ZzZCN3BzN1RUSTRjUDdNcHBnM2w3dHUu​TVJBWVVMeVZxY21BOWhHTHBIaWlTLlE3ck85eWpsbWZmaUJVTTZ0RnBZQWxYRWtSakhiOTsxMC4yMi4zNC45MjsxNDc3N​jc0NDg3NTA1O1gxRDlTRUVU

除了標頭外,輪詢要求還包含這些參數。

參數 描述
grant_type 此流程的值必須是 device
client_id 連線的應用程式取用者金鑰。若要存取取用者金鑰,請在「應用程式管理員」中尋找連線的應用程式,然後從下拉式清單選取「檢視」。然後按一下「管理取用者細節」。有時系統會提示您在檢視消費者金鑰前先驗證身分。
code 授權伺服器會在成功驗證後建立授權代碼,並將其傳遞至用戶端,該授權代碼為短暫的權杖。用戶端會將授權代碼傳送至授權伺服器來取得存取權杖,或者是重新整理權杖。

Salesforce 授與存取權杖

如果使用者授與存取權,則 Salesforce 會以成功訊息和存取權杖與其他值來回應。例如:

{
"access_token": "00DD00000008Uw2!ARkAQGppKf6n.VwG.EnFSvi731qWh.7vKfaJjL7h49yutIC84gAsxM​rqcE81GjpTjQbDLkytl2ZwosNbIJwUS0X8ahiILj3e"
"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 建立簽章時的時間戳記 (單位為毫秒)。
 
正在載入
Salesforce Help | Article