进行角色SSO时,通过调用AssumeRoleWithSAML接口,可以获取一个扮演该角色的临时身份凭证(STS Token)。

请求参数

说明 由于AssumeRoleWithSAML接口使用SAML断言进行身份认证,可以匿名访问,因此不需要提供公共参数中的SignatureSignatureMethodSignatureVersionAccessKeyId参数。
名称 类型 是否必选 示例值 描述
Action String AssumeRoleWithSAML 要执行的操作。取值:AssumeRoleWithSAML。
SAMLProviderArn String acs:ram::123456789012****:saml-provider/company1 RAM中创建的身份提供商的ARN。

格式:acs:ram::<account_ID>:saml-provider/<saml_provider_ID>

说明 您可以通过RAM控制台或API查看身份提供商的ARN。具体如下:
RoleArn String acs:ram::123456789012****:role/adminrole 要扮演的角色的ARN。

该角色是可信实体为身份提供商的RAM角色。更多信息,请参见创建可信实体为身份提供商的RAM角色CreateRole

格式:acs:ram::<accountID>:role/<roleName>

说明 您可以通过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的权限。具体如下:
  • 如果指定该权限策略,则STS Token最终的权限取RAM角色权限策略与该权限策略的交集。
  • 如果不指定该权限策略,则STS Token最终的权限就是RAM角色的权限。

长度为1~1024个字符。

DurationSeconds Long 3600

过期时间,单位为秒。

过期时间最小值为900秒,最大值为MaxSessionDuration设置的时间。默认值为3600秒。

说明 您可以通过CreateRoleUpdateRole接口设置角色最大会话时间MaxSessionDuration。详情请参见CreateRoleUpdateRole

返回数据

名称 类型 示例值 描述
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断言无效。