釋放 AI 的強大力量

100 萬免費代幣

88% 價格優惠

立即啟用
本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

移動端和案頭端應用的OAuth2.0接入流程

更新時間:2024-07-06 01:53
說明

本文檔主要描述移動端和案頭用戶端如何通過 OAuth2.0 介面接入 PDS。

1. 介紹

由於是端應用,您的應用中無法存放機密資訊,比如 App 的 secret。

對於移動端(Android, IOS),一般是要喚醒授權App授權,需要使用 URL Scheme。

對於案頭用戶端(mac,linux windows 案頭端),可以通過迴環IP地址(Loopback IP address)喚醒授權端, 也可以通過 URL Scheme。

還有一種方式也比較常用,就是通過webview 請求Web服務應用的方式。

(1) 原理:

授權碼模式:同Web服務應用接入的授權碼模式基本相同,除了擷取token的步驟不需要提供Secret參數(因為沒有Web服務端,而secret不能放在用戶端)。

(2) 使用案例圖

image

2. 接入前提

(1) 建立Domain

首先,您需要在 PDS 官網控制台 https://pds.console.aliyun.com建立一個域(Domain)。建立完成後,會提供一個3級API網域名稱 https://{domainId}.api.aliyunpds.com

(2) 開啟使用者體系登入

PDS提供了幾種常用的使用者體系登入認證方式,開發人員可以直接到PDS控制台開啟對接。詳情請看PDS支援的使用者體系介紹

(3) 建立App(Client)

建立App,選擇類型為”Native應用”。確定App的訪問Scope, 這個Scope要在使用者授權頁面展示。建立完成,可以得到 AppId(ClientId) 和 Secret(ClientSecret)。這個是授權認證的憑證,Secret要注意保密不要泄露。

(4) 規劃 redirect_uri

自訂URL Scheme(Android, iOS)

APP需要註冊自己的URL Scheme,用來唯一標識一個App。Scheme格式:<scheme網域名稱>://<path>?<params>=<value>

自訂Lookback IP Address(案頭用戶端)

可以啟動一個本地Web服務,監聽連接埠,如 : http://127.0.0.1:3000/callback或者 http://[::1]:3000

3. 擷取 OAuth2.0 Access Token 步驟

(1) /authorize 介面

API 請求文法:

GET /v2/oauth/authorize?client_id=<appId>&redirect_uri=<redirect_uri>&scope=<scope>&login_type=<login_type>&state=[state]&prompt=[prompt] HTTP/1.1
Host: {domainId}.api.aliyunpds.com

參數

是否必選

描述

參數

是否必選

描述

client_id

AppId, 如果沒有請到官網控制台去建立。

redirect_uri

回調地址:告訴認證服務在授權認證流程完成後重新導向到哪裡。一般是您的用戶端應用提供的一個URL Scheme或者LookBack IP Address。比如:pdshz001://callback/, 認證服務在授權完成後,會redirect到這個地址並且帶上一次性的code:  pdshz001://callback/?code=xxxx,然後您需要使用這個code完成後續流程。 注意:這個redirect_uri必須和您建立App時填寫的redirect_uri一致。

scope

存取範圍列表,描述您的Web服務應用需要的存取權限範圍,將在使用者同意授權頁面展示。請看:Scope說明

response_type

此處固定為”code

state

否,但推薦使用

如果請求中包含這個參數,證明伺服器在重新導向的時候會原封不動返回, 用於防止重放攻擊。如:pdshz001://callback/?code=xxxx&state=abc

login_type

登入選項, 可選:['default','phone','ding','ldap','wx','ram']default表示預設的登入頁面(頁麵包含手機號登入和其他登入連結),phone表示手機號登入,ding表示DingTalk掃碼登入,ldap表示LDAP/AD域登入,wx表示企業微信登入,ram表示阿里雲RAM子帳號登入。

hide_consent

在使用者第一次登入完成後,是否需要展示 consent 頁面。可選值:true, false。如果為true則不展示,直接跳過。

lang

介面展示的語言。目前支援:zh_CNen_US。預設:zh_CN

發送此請求後,PDS Auth服務會引導使用者去登入。使用者登入完成後,如果使用者是第一次登入且沒有傳入參數 hide_consent=true,則會重新導向到 consent 頁面,否則會直接重新導向到請求參數中的 redirect_uri,比如:pdshz001://callback/?code=xxxx&state=abc

(2) Consent 頁面

在此步驟中,使用者可以決定是否授權給Web服務應用。如果不同意授權,則流程終止。 如果同意授權,將重新導向到第一步請求中的 redirect_uri, 比如:pdshz001://callback/?code=xxxx&state=abc

(3) 通過 code 擷取 AccessToken

應用擷取到 code 後,調用下面的介面換取 AccessToken。

API 請求文法:

POST /v2/oauth/token HTTP/1.1
Host: {domainId}.api.aliyunpds.com
Content-Type: application/x-www-form-urlencoded

code=xxx\
&client_id=your_app_id\
&redirect_uri=pdshz001://callback\
&grant_type=authorization_code

參數

是否必選

描述

參數

是否必選

描述

code

一次性code,使用過一次後即失效。

client_id

AppId

redirect_uri

這個redirect_uri 必須和您建立App時填寫的redirect_uri 一致。

grant_type

根據OAuth2.0規範,此處的值固定為”authorization_code”。

返回

名稱

位置

類型

必選

說明

名稱

位置

類型

必選

說明

access_token

body

string

產生的 id_token,有效期間2小時。

expires_time

body

string

access_token 的有效期間。

expire_in

body

string

失效時間。單位秒。

token_type

body

string

固定為 Bearer

範例:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "access_token":"Aiasd76Y****...LSdyssd2",
  "expires_time":"2019-11-11T10:10:10.009Z",
  "expire_in": 7200,
  "token_type":"Bearer",
  "refresh_token":"LSLKdklksd...li3ew6"
}
說明

本次請求的傳回值與用授權碼換取存取權杖的傳回值一致,但不包含 refresh_token。

說明

請忽略返回的資料中的非必選欄位。

4. 調用 PDS 服務 API

用戶端可以直接使用 AccessToken 調用 PDS API。只需在要求標頭的Authorization中帶上AccessToken。

調用方式詳細請參考調用方式

5. 重新整理Token

(1) 請求方式舉例:

POST /v2/oauth/token HTTP/1.1
Host: {domainId}.api.aliyunpds.com
Content-Type: application/x-www-form-urlencoded

refresh_token=xxx\
&client_id=xxx\
&grant_type=refresh_token

請求參數

參數名稱

是否必選

描述

參數名稱

是否必選

描述

refresh_token

用授權碼換取存取權杖時獲得的重新整理權杖。

client_id

應用的身份 ID。

grant_type

根據 OAuth 2.0 協議, 取值為:refresh_token。

client_secret

應用的密鑰,用作換取存取權杖時評鑑應用身份的密碼。

(2) 返回

HTTP/1.1 200 OK
Content-Type: application/json

{
  "access_token":"xxxxxxxxx",
  "expires_in":3920,
  "expire_time":"2019-11-11T10:10:10.009Z",
  "token_type":"Bearer"
}

返回參數

(3) 通過 code 擷取 AccessToken 返回結構一樣。

  • 本頁導讀 (1, M)
  • 1. 介紹
  • 2. 接入前提
  • 3. 擷取 OAuth2.0 Access Token 步驟
  • 4. 調用 PDS 服務 API
  • 5. 重新整理Token
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare