OAuth 1.0.A 流程
如果組織使用 OAuth 1.0.A 通訊協定,請使用此授權流程,透過連線應用程式來整合用戶端與 Salesforce API。
必要版本
| 提供版本:Salesforce Classic 與 Lightning Experience |
| 提供版本:所有版本 |
| 需要的使用者權限 | |
|---|---|
| 管理、建立、編輯和刪除 OAuth 應用程式: | 「管理已連線的應用程式」權限 |
這裡是主要的授權步驟。
- 連線應用程式會要求要求權杖。Salesforce 驗證要求,並傳回要求權仗。
- 使用者登入並授權連線應用程式來存取資料。
- 連線應用程式會要求存取權杖。
- 在 Salesforce 驗證要求並授與權杖後,連線應用程式就會存取資料。
如需 Salesforce 所傳回可能錯誤碼的清單,請參閱 OAuth 1.0.A 錯誤碼。
要求要求權杖
若要起始 OAuth 1.0.A 流程,連線應用程式會將要求傳送至 Salesforce OAuth 要求權杖處理常式端點 (https://login.salesforce.com/_nc_external/system/security/oauth/RequestTokenHandler)。
在要求中包含以下 OAuth 參數。
在 Salesforce 接收要求後,其會執行以下動作:
- 驗證要求是否具備其消費者密碼的專屬複本。
- 產生回應,其中包含在 HTTP 內文中的要求權杖和要求權杖密碼作為名稱和值配對。
- 將回應傳送回給銷售者。
要求權杖的有效期間為 15 分鐘,再加上另外 3 分鐘的時間因應電腦時鐘的誤差。
使用者授權存取權
在連線應用程式發出要求權杖的初始要求後,使用者會收到授權存取權的提示。
- 連線應用程式會將使用者重新導向至 https://login.salesforce.com/setup/secur/RemoteAccessAuthorizationPage.apexp。適當的 GET 查詢參數會附加於此 URL 之後。
oauth_token(要求權杖)oauth_consumer_key
備註 如果包含oauth_callback參數,則會忽略該參數。 - 使用者會收到提示,要求在「遠端存取授權」頁面上授權連線應用程式的存取權。
- 在使用者授權存取權後,Salesforce 會產生存取權杖和存取權杖密碼。
備註 使用者可以將有限數量的同時存取權杖授與給應用程式。預設為每個使用者的每個應用程式有五個。如果此授權超過組織的限制,則使用者會收到通知,且系統會撤銷前一個使用的權杖。 - Salesforce 會如下確認回呼 URL 並重新導向使用者。
- 如果要求權杖中定義的
oauth_callback為oob,且連線應用程式的回呼 URL 有效,則會將使用者重新導向至該 URL。 - 如果要求權杖中定義的
oauth_callback是有效的 URL,則會將使用者重新導向至該 URL。
- 如果要求權杖中定義的
要求存取權杖
在使用者授權連線應用程式的存取權後,連線應用程式就可以交換要求權杖來要求存取權杖。此會對 https://login.salesforce.com/_nc_external/system/security/oauth/AccessTokenHandler 發出 HTTPS GET 或 POST 要求。在查詢或貼文資料中包含這些參數。
| 參數 | 描述 |
|---|---|
oauth_consumer_key
|
連線的應用程式取用者金鑰。若要存取取用者金鑰,請在「應用程式管理員」中尋找連線的應用程式,然後從下拉式清單選取「檢視」。然後按一下「管理取用者細節」並驗證身分。 |
oauth_signature_method
|
OAuth 簽章方法必須是此流程的 HMAC-SHA1。 |
| oauth_signature | 登入所用的 OAuth 簽章,您會根據 HMAC-SHA1 的 OAuth 規格產生此簽章。請參閱 oauth_signature。 |
oauth_timestamp
|
建立簽章時的時間戳記。 |
oauth_token
|
連線應用程式在其初始要求中接收的要求權杖。 |
oauth_nonce
|
選擇性。允許服務提供者確認以前是否發出要求,並協助避免重新執行攻擊。 |
oauth_verifier
|
連線應用程式在其初始要求中接收的要求權杖密碼。 |
oauth_version
|
選擇性。如果包含,則此流程的 OAuth 版本必須為 1.0。 |
Salesforce 會在要求中驗證這些元素:
- 消費者密碼
- 消費者金鑰
- 簽署
- 是否在以前曾使用過要求權杖
- 時間戳記 (必須在 15 分鐘內,再加上另外 3 分鐘的時間因應電腦時鐘的誤差)
- 先前是否曾使用過該亂數
驗證後,Salesforce 會在 HTTP 回應內文中傳回存取權杖和存取權杖密碼作為名稱和值配對。
存取資料
在連線應用程式擁有有效的存取權杖後,就能夠透過將要求張貼至 https://login.salesforce.com,以存取 Salesforce 資料。以下參數會包含在 HTTP POST 授權標頭中。
| 參數 | 描述 |
|---|---|
oauth_consumer_key
|
連線的應用程式的取用者金鑰若要存取取用者金鑰,請在「應用程式管理員」中尋找連線的應用程式,然後從下拉式清單選取「檢視」。然後按一下「管理取用者細節」。有時會要求您驗證身分。 |
oauth_token
|
連線應用程式透過 Salesforce 接收的存取權杖。 |
oauth_signature_method
|
OAuth 簽章方法必須是此流程的 HMAC-SHA1。 |
| oauth_signature | 登入所用的 OAuth 簽章,您會根據 HMAC-SHA1 的 OAuth 規格產生此簽章。請參閱 oauth_signature。 |
oauth_timestamp
|
建立簽章時的時間戳記。 |
oauth_nonce
|
選擇性。允許服務提供者確認以前是否發出要求,並協助避免重新執行攻擊。 |
oauth_version
|
選擇性。如果包含,則此流程的 OAuth 版本必須為 1.0。 |
Salesforce 會驗證要求,並將有效的工作階段識別碼傳送至連線應用程式。工作階段識別碼是短暫的且僅對 frontdoor.jsp 有效。若要取得可直接使用的工作階段識別碼,請使用 API 存取權杖交換。
連線的應用程式擁有有效的存取權杖時,其就可以使用 Lightning 平台 API 來存取 Salesforce 資料。連線應用程式可以將要求張貼至 https://login.salesforce.com/services/OAuth/type/api-version。
使用以下值來取代 URL 變數:
- type 必須是下列其中一個值。
u—Partner WSDLc—企業 WSDL
- Api-version 必須是有效的 API 版本。
將以下參數包含在 HTTPS POST 授權標頭。
| 參數 | 描述 |
|---|---|
oauth_consumer_key |
連線的應用程式取用者金鑰。若要存取取用者金鑰,請在「應用程式管理員」中尋找連線的應用程式,然後從下拉式清單選取「檢視」。然後按一下「管理取用者細節」。有時會要求您驗證身分。 |
oauth_token |
連線應用程式透過 Salesforce 接收的存取權杖。 |
oauth_signature_method |
OAuth 簽章方法必須是此流程的 HMAC-SHA1。 |
| oauth_signature | 登入所用的 OAuth 簽章,您會根據 HMAC-SHA1 的 OAuth 規格產生此簽章。請參閱 oauth_signature。 |
oauth_timestamp |
建立簽章時的時間戳記。 |
oauth_nonce |
選擇性。允許服務提供者確認以前是否發出要求,並協助避免重新執行攻擊。 |
oauth_version |
選擇性。如果包含,則此流程的 OAuth 版本必須為 1.0。 |
Salesforce 會驗證要求,並且將有效的工作階段識別碼傳送給客戶。回應標頭包含以下內容。
<response>
<metadataServerUrl>https://yourInstance.salesforce.com/services/Soap/m/17.0/00D300000006qjK
</metadataServerUrl>
<sandbox>false</sandbox>
<serverUrl>https://yourInstance.salesforce.com/services/Soap/u/17.0/00D300000006qjK
</serverUrl>
<sessionId>00D300000006qrN!AQoAQJTMzwTa67tGgQck1ng_xgMSuWVBpFwZ1xUq2kLjMYg6Zq
GTS8Ezu_C3w0pdT1DMyHiJgB6fbhhEPxKjGqlYnlROIUs1</sessionId>
</response>