本文將結合阿里雲RAM存取控制,向您示範如何配置M2M應用的無AK訪問方式,並擷取STS Token的流程。
前提條件
-
已完成M2M應用的相關配置。瞭解M2M相關應用及配置,請參考:M2M應用(機器間許可權管理)。
建立OIDC身份供應商
-
使用Resource Access Management員登入RAM控制台。
-
在左側導覽列,選擇。
-
在角色 SSO頁簽,先單擊OIDC頁簽,然後單擊创建身份提供商。
-
在创建身份提供商頁面,設定身份供應商資訊。
參數
說明
身份提供商名称
同一個阿里雲帳號下必須唯一,與 IDaaS 無關,按照 RAM 規則錄入。
颁发者 URL
-
頒發者 URL(Issuer URL)是外部身份供應商(IdP)為M2M應用程式指派的唯一標識,用於OAuth 2.0等協議中校正令牌來源。
-
阿里雲IDaaS會基於此URL驗證外部IdP頒發的令牌的有效性,其配置位於IDaaS M2M應用(Client端)的 Issuer 欄位中。
驗證指紋
-
填寫完颁发者 URL後,您可以單擊擷取指紋,阿里雲會輔助您自動計算出驗證指紋,但是建議您在本地自己計算一次(例如:通過OpenSSL擷取OIDC IdP的指紋),與阿里雲計算的指紋進行對比。
-
如果對比發現不同,則說明該頒發者URL可能已經受到攻擊,請您務必再次確認,並填寫正確的指紋,RAM 會根據錄入的 Issuer 地址訪問擷取指紋。
說明當您的IdP計划進行認證輪轉時,請在輪轉前產生新認證的指紋並添加到阿里雲OIDC身份供應商資訊中,一段時間(至少一天)以後再進行認證輪轉,認證輪轉確認可以換取到STS Token後再刪除舊的指紋。
客户端ID
-
用戶端ID(Client ID)是您的應用在外部身份供應商(IdP)註冊時產生的唯一標識。當外部IdP簽發OIDC令牌(OIDC Token)時,需使用該用戶端ID,且令牌的aud欄位會攜帶此ID。在阿里雲OIDC身份供應商中配置此用戶端ID後,系統會在使用OIDC Token換取STS Token時校正aud欄位的用戶端ID是否匹配,確保安全扮演角色。
-
單個OIDC身份供應商最多支援配置50個用戶端ID,適用於多應用訪問阿里雲的情境。
-
在M2M(Machine-to-Machine)應用情境中,用戶端ID對應 IDaaS M2M 應用中配置的受众标识,用於服務端間認證。
最早颁发时间限制
在該限制時間之前頒發的OIDC Token不允許換取STS Token。預設值:12小時。取值範圍:1~168小時。
備忘
身份供應商的描述資訊。
-
-
單擊创建身份提供商。
建立OIDC身份供應商角色
-
前往阿里雲RAM存取控制控制台,選擇。
-
在編輯器頁面,按照以下步驟,開始添加身份提供者。
單擊可視化編輯頁簽,在主體類型中選擇身份提供者,然後單擊添加按鈕添加身份提供者。
-
在添加主體彈出框中,選擇上文中已經建立好的身份提供者,點擊确定完成添加。
將身份提供者類型選擇為OIDC。
-
身份提供者添加完成後,會預設產生iss和aud條件,您可以選擇編輯或刪除這兩個條件,也可以繼續添加新的條件。
預設產生的兩個條件鍵分別為
oidc:iss和oidc:aud,運算子均為 StringEquals。 -
下文以添加
sub條件運算式為例,向您示範如何添加條件,您可按實際需要選擇是否添加。編輯完成後,點擊确定,即可完成添加。說明-
條件值:您需要填入已經建立好的M2M應用Server端的 client_id。如何添加M2M應用及查看受眾標識等資訊,請參考:M2M應用(機器間許可權管理)。
-
如果您需要瞭解更多條件運算式的資訊,請參考:權限原則基本元素。
-
當前RAM OIDC中僅支援三種條件:oidc:iss、oidc:aud、oidc:sub。
在運算子下拉框中選擇
StringEquals。 -
-
單擊底部的确定,在建立角色彈出框中,填入您要建立的角色名稱,單擊确定,即可完成角色建立。
角色授權
您可以根據需要,向已建立的角色新增授权。
在角色的許可權管理頁簽下單擊新增授權,資源範圍選取帳號層級,在權限原則搜尋方塊中輸入 idaas 進行篩選,勾選系統策略 AliyunYundunIdaasReadOnlyAccess,然後單擊確認新增授權。
擷取M2M Token
通過curl命令方式擷取
-
請將以下佔位參數替換為您的應用配置後,執行curl命令,擷取Token。
# 請將<app_issuer_endpoint>、<YOUR_APP_CLIENT_ID>、<YOUR_APP_CLIENT_SECRET>和<YOUR_SERVER_AUD_IDENTIFIER>替換為您M2M應用的具體配置值。 # # <YOUR_SERVER_ISSUER_ENDPOINT>:Issuer,“Resources Server應用 > 通用配置 > Issuer“中查看Endpoint並替換。 # <YOUR_APP_CLIENT_ID>:用戶端ID,在“Client應用 > 通用配置 > 憑證管理“中查看client_id並替換。 # <YOUR_APP_CLIENT_SECRET>:用戶端Secret,在“Client應用 > 通用配置 > 憑證管理“中查看client_secret並替換。 # <YOUR_SERVER_AUD_IDENTIFIER>:服務端受眾標識,在“Resources Server應用 > 服務端許可權開放 > 許可權應用 > 受眾標識“中,尋找受眾標識並替換。 # curl --location --request POST 'https://<YOUR_SERVER_ISSUER_ENDPOINT>.aliyunidaas.com/api/v2/iauths_system/oauth2/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=<YOUR_APP_CLIENT_ID>' \ --data-urlencode 'client_secret=<YOUR_APP_CLIENT_SECRET>' \ --data-urlencode 'grant_type=client_credentials' \ #.all 是阿里雲 IDaaS 平台中的一個預定義範圍識別碼,表示 請求該受眾(Audience)下的所有可用許可權。 --data-urlencode 'scope=<YOUR_SERVER_AUD_IDENTIFIER>|.all' -
Token擷取成功時結果如下。
xxx ~ % curl --location --request POST 'https://xxx.aliyunidaas.com/api/v2/iauths_system/oauth2/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=app_xxx4y54' \ --data-urlencode 'client_secret=CSHoxxx5ZQ6' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'scope=xxx.all' { "token_type": "Bearer", "access_token": "eyJrxxxi5rg", "expires_in": 3600, "expires_at": 1741336113 }
通過Postman工具擷取
-
請將各參數替換為您的應用配置參數後,通過Postman發起請求擷取token。
請求地址為
POST https://<IDaaS執行個體網域名稱>.aliyunidaas.com/api/v2/iauths_system/oauth2/token,Body 選擇 x-www-form-urlencoded 編碼方式,包含參數client_id、client_secret、grant_type(值為client_credentials)和scope。請求成功後(200 OK),返回的 JSON 響應體格式:{ "token_type": "Bearer", "access_token": "eyJrxxx...xxxDiCw", "expires_in": 3600, "expires_at": 1741331524 }其中
access_token即為擷取到的 Bearer 類型存取權杖,有效期間為 3600 秒。
通過M2M Token擷取RAM角色的臨時身份憑證(STS Token)
如果您暫時不瞭解阿里雲STS,請先前往瞭解什麼是STS。
OpenAPI方式擷取
-
前往OpenAPI門戶,找到AssumeRoleWithOIDC介面。
說明本文僅示範擷取,更多關於AssumeRoleWithOIDC介面的詳細資料,請參見:AssumeRoleWithOIDC - OIDC角色SSO時擷取扮演角色的臨時身份憑證。
-
填寫介面所需的必要參數,確認無誤後點擊發起調用,即可擷取到STS Token。
重要-
OIDCProviderArn:請前往您已建立的OIDC身份服務提供者角色的基本資料中,從信任策略中擷取。
-
RoleArn:請前往您已建立的OIDC身份服務提供者角色的基本資料中,找到ARN並擷取。
-
OIDCToken:填入您上文中已擷取成功的M2M Token。
-
RoleSessionName:無特殊要求,使用者自訂欄位,僅作為角色標識。
-