進行角色SSO時,通過調用AssumeRoleWithSAML介面,可以擷取一個扮演該角色的臨時身份憑證(STS Token)。
請求參數
说明 由於AssumeRoleWithSAML介面使用SAML斷言進行身份認證,可以匿名訪問,因此不需要提供公用參數中的Signature、SignatureMethod、SignatureVersion和AccessKeyId參數。
名稱 | 類型 | 是否必選 | 樣本值 | 描述 |
---|---|---|---|---|
Action | String | 是 | AssumeRoleWithSAML | 要執行的操作。取值:AssumeRoleWithSAML。 |
SAMLProviderArn | String | 是 | acs:ram::123456789012****:saml-provider/company1 | RAM中建立的身份供應商的ARN。
格式: 说明 您可以通過RAM控制台或API查看身份供應商的ARN。具體如下:
|
RoleArn | String | 是 | acs:ram::123456789012****:role/adminrole | 要扮演的角色的ARN。
該角色是可信實體為身份供應商的RAM角色。更多資訊,請參見建立可信實體為身份供應商的RAM角色或CreateRole。 格式: 说明 您可以通過RAM控制台或API查看角色ARN。具體如下:
|
SAMLAssertion | String | 是 | <base64_encoded_saml_assertion> | Base64編碼後的SAML斷言。
長度為4~100000個字元。 说明 需要從IdP擷取完整的SAMLResponse,不能是單獨的SAMLAssertion欄位。
|
Policy | String | 否 | <url_encoded_policy> | 為STS Token額外添加的一個權限原則,進一步限制STS Token的許可權。具體如下:
長度為1~1024個字元。 |
DurationSeconds | Long | 否 | 3600 |
到期時間,單位為秒。 到期時間最小值為900秒,最大值為MaxSessionDuration設定的時間。預設值為3600秒。 |
返回資料
名稱 | 類型 | 樣本值 | 描述 |
---|---|---|---|
RequestId | String | 6894B13B-6D71-4EF5-88FA-F32781734A7F | 請求ID。 |
Credentials | 訪問憑證。 | ||
└AccessKeyId | String | STS.L4aBSCSJVMuKg5U1**** | 存取金鑰ID。 |
└AccessKeySecret | String | wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pK**** | 存取金鑰。 |
└SecurityToken | String | ******** | 安全性權杖。 |
└Expiration | String | 2015-04-09T11:52:19Z | 失效時間。 |
AssumedRoleUser | 角色扮演臨時身份。 | ||
└Arn | String | acs:sts::123456789012****:assumed-role/AdminRole/alice | 臨時身份的ARN。 |
└AssumedRoleId | String | 34458433936495****:alice | 臨時身份的ID。 |
SAMLAssertionInfo | SAML斷言中的部分資訊。 | ||
└SubjectType | String | persistent | SAML斷言中NameID 的格式。當首碼為urn:oasis:names:tc:SAML:2.0:nameid-format: 時,首碼會被移除。例如:persistent/transient 。
|
└Subject | String | alice@example.com | SAML斷言中Subject - NameID 欄位的值。
|
└Recipient | String | https://signin.aliyun.com/saml-role/SSO | SAML斷言中Subject - SubjectConfirmation - SubjectConfirmationData 欄位中Recipient 屬性的值。
|
└Issuer | String | http://example.com/adfs/services/trust | SAML斷言中Issuer 欄位的值。
|
樣本
請求樣本
https://sts.aliyuncs.com/?Action=AssumeRoleWithSAML
&Format=xml
&Version=2015-04-01
&SignatureNonce=1521552885****
&Timestamp=2021-06-01T12:00:00Z
&RoleArn=acs:ram::123456789012****:role/adminrole
&SAMLProviderArn=acs:ram::123456789012****:saml-provider/company1
&SAMLAssertion=<base64_encoded_saml_assertion>
&Policy=<url_encoded_policy>
&DurationSeconds=3600
说明 由於SAMLAssertion參數較長,可能會導致GET請求失敗,請您使用POST方法發送此請求。
返回樣本
XML
格式
<AssumeRoleResponse>
<RequestId>6894B13B-6D71-4EF5-88FA-F32781734A7F</RequestId>
<AssumedRoleUser>
<arn>acs:sts::123456789012****:assumed-role/AdminRole/alice</arn>
<AssumedRoleId>34458433936495****:alice</AssumedRoleId>
</AssumedRoleUser>
<Credentials>
<AccessKeyId>STS.L4aBSCSJVMuKg5U1****</AccessKeyId>
<AccessKeySecret>wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pK****</AccessKeySecret>
<SecurityToken>********</SecurityToken>
<Expiration>2015-04-09T11:52:19Z</Expiration>
</Credentials>
<SAMLAssertionInfo>
<SubjectType>persistent</SubjectType>
<Subject>alice@example.com</Subject>
<Recipient>https://signin.aliyun.com/saml-role/SSO</Recipient>
<Issuer>http://example.com/adfs/services/trust</Issuer>
</SAMLAssertionInfo>
</AssumeRoleResponse>
JSON
格式
{
"Credentials": {
"AccessKeyId": "STS.L4aBSCSJVMuKg5U1****",
"AccessKeySecret": "wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pK****",
"Expiration": "2015-04-09T11:52:19Z",
"SecurityToken": "********"
},
"AssumedRoleUser": {
"arn": "acs:sts::1234567890123456:assumed-role/AdminRole/alice",
"AssumedRoleId":"34458433936495****:alice"
},
"SAMLAssertionInfo": {
"SubjectType": "persistent",
"Subject": "alice@example.com",
"Recipient": "https://signin.aliyun.com/saml-role/SSO",
"Issuer": "http://example.com/adfs/services/trust"
},
"RequestId": "6894B13B-6D71-4EF5-88FA-F32781734A7F"
}
錯誤碼
HttpCode | 錯誤碼 | 錯誤資訊 | 描述 |
---|---|---|---|
400 | MissingParameter.SAMLAssertion | Parameter SAMLAssertion is required. | 缺少SAMLAssertion參數。 |
400 | MissingParameter.SAMLProviderArn | Parameter SAMLProviderArn is required. | 缺少SAMLProviderArn參數。 |
400 | MissingParameter.RoleArn | Parameter RoleArn is required. | 缺少RoleArn參數。 |
400 | InvalidParameter.PolicyGrammar | Invalid Policy. | 無效的權限原則。 |
400 | InvalidParameter.PolicySize | The max size of policy string is 1024. | 權限原則字串長度超限,最大不超過1024字元。 |
400 | InvalidParameter.RoleSessionName | The RoleSessionName is invalid. | 角色會話名稱無效。 |
400 | InvalidParameter.DurationSeconds | The DurationSeconds is invalid. | DurationSeconds無效。 |
404 | EntityNotExist.SAMLProvider | Can not find SAML provider. | 找不到SAML身份供應商。 |
404 | EntityNotExist.RoleArn | The specified Role does not exists. | 指定的角色不存在。 |
401 | AuthenticationFail.IDPMetadata.Invalid | The IdP Metadata of your SAML Provider is invalid. | SAML身份供應商的IdP中繼資料無效。 |
401 | AuthenticationFail.SAMLAssertion.Expired | The SAML Assertion is expired. | SAML斷言已到期。 |
401 | AuthenticationFail.SAMLAssertion.Invalid | The SAML Assertion is invalid. | SAML斷言無效。 |