本文提供一个以Okta与阿里云进行角色SSO的示例,帮助您理解企业IdP与阿里云进行SSO的端到端配置流程。

前提条件

  • 进行操作前,请确保您已经注册了阿里云账号。如还未注册,请先完成账号注册
  • 进行操作前,请确保您已经拥有Okta账号。
    说明 如果仅作为测试用途,您可以在Okta官网申请有效期为30天的账号。

操作流程

本文的配置目标是在Okta应用中创建一个名为approle的属性,并根据这个属性的值来映射访问阿里云的RAM角色。您可以按照下图所示的操作流程完成阿里云、Okta的配置。

流程图

步骤1:在Okta创建支持SAML SSO的应用

  1. 登录Okta门户
    说明 您需要提前在手机端下载Okta Verify应用,登录时需要输入6位动态验证码。
  2. 将鼠标悬停在页面右上方的账号图标上,单击Your Org
  3. 单击Admin
    SSO_Okta_管理员
  4. 在Okta顶部菜单栏,单击Applications
    SSO_Okta_Applications
  5. 单击Add Application
  6. 单击Create New App
  7. Platform选择为WebSign on method选择为SAML 2.0,单击Create
  8. 配置应用名称为role-sso-test,单击Next
  9. 配置SAML,然后单击Next
    SAML General
    • Single sign on URLhttps://signin.alibabacloud.com/saml-role/sso
    • Audience URIurn:alibaba:cloudcomputing:international
    • Default RelayState:用来配置用户登录成功后跳转到的阿里云页面。
      说明 出于安全原因,您只能填写阿里巴巴旗下的域名URL作为Default RelayState的值,例如:*.aliyun.com、*.hichina.com、*.yunos.com、*.taobao.com、*.tmall.com、*.alibabacloud.com、*.alipay.com,否则配置无效。若不配置,默认跳转到阿里云控制台首页。
    • Name ID format:选择EmailAddress
    • Application username:选择Email
  10. 根据需要选择合适的应用类型,单击Finish

步骤2:在Okta获取SAML IdP元数据

  1. 在Okta顶部菜单栏,单击Applications
  2. 单击目标应用名称(role-sso-test)。
  3. Sign On页签下,单击Identity Provider metadata,将IdP元数据另存到本地。
    SSO_Okta_Sign On

步骤3:在阿里云创建身份提供商

  1. 使用阿里云账号登录RAM控制台
  2. 在左侧导航栏,单击SSO管理
  3. 角色SSO页签,单击创建身份提供商
  4. 输入身份提供商名称(okta-provider)和备注
  5. 单击元数据文档下的上传文件,上传从步骤2:在Okta获取SAML IdP元数据中获取的IdP元数据。
  6. 单击确定

步骤4:在阿里云创建RAM角色

  1. 在RAM控制台的左侧导航栏,单击RAM角色管理
  2. 单击创建RAM角色
  3. 选择可信实体类型为身份提供商,单击下一步
  4. 输入角色名称(admin)和备注
  5. 选择从步骤3:在阿里云创建身份提供商中创建的身份提供商并查看限制条件后,单击完成
  6. 单击关闭

步骤5:在Okta配置Profile

  1. 编辑Profile,创建一个新的Attribute。
    1. 在Okta顶部菜单栏,单击Directory > Profile Editor
    2. 单击对应Profile后面的edit profile
    3. 单击Add Attribute,填写Attribute信息。
      • Data type:选择string
      • Display name:填写将在用户界面中显示的名称,本示例中请填写approle
      • Variable name:填写将在映射中引用的变量名称,本示例中请填写approle。您需要记录该参数的值,下一步配置Attribute的时候会用到。
      • Enum:选中Define enumerated list of values,定义一个枚举值列表。
        说明 我们使用Enum来确保用户只能使用预定义的属性值。您也可以不使用Enum,而获得更高的灵活性。
      • Attribute members:填写枚举值列表,Value必须要与RAM中创建的角色名称相同,例如:admin、reader。
      • Description:请根据需要填写属性描述,可以不填写。
      • Attribute Length:本示例使用枚举值,因此不需要设置。如果您实际中未使用枚举值,请根据需要设置属性长度。
      • Attribute required:选中Yes
      • Scope:不选中User personal
    4. 单击Save
  2. 配置Attribute。
    1. 在Okta顶部菜单栏,单击Applications > Applications
    2. 单击应用名称(role-sso-test)。
    3. General页签下的SAML Settings区域,单击Edit
    4. Configure SAML页面的ATTRIBUTE STATEMENTS (OPTIONAL)区域,配置如下图所示的两条数据。edit Attribute
      • 配置第1条数据:
        • Name:填写https://www.aliyun.com/SAML-Role/Attributes/RoleSessionName
        • Value:选择user.email
      • 配置第2条数据:
        • Name:填写https://www.aliyun.com/SAML-Role/Attributes/Role
        • Value:取值为String.replace("acs:ram::<account_id>:role/$approle,acs:ram::<account_id>:saml-provider/okta-provider", "$approle", appuser.approle),是用登录用户在应用Profile中的approle属性值来替换$approle占位符,从而获取最终的SAML属性值。其中approle是之前在Profile Attribute中定义的属性。okta-provider步骤3:在阿里云创建身份提供商中创建的身份提供商。<account_id>需要替换为您的阿里云账号ID。例如:String.replace("acs:ram::177242285274****:role/$approle,acs:ram::177242285274****:saml-provider/okta-provider", "$approle", appuser.approle)

步骤6:在Okta创建用户并分配应用

  1. 创建用户。
    1. 在Okta顶部菜单栏,单击Directory > People
      OSS_Okta_poeple
    2. 单击Add Person,在Add Person页面,填写基本信息并将Primary email配置为被邀请用户的Email,例如:test@example.com。
    3. Password区域,勾选Send user activation email now,单击Save
      说明 根据页面提示激活Okta用户。
  2. 分配应用。

    分配应用有以下两者方式,请任选其一。

    • 为单个用户分配应用。
      1. 在Okta顶部菜单栏,单击Applications
      2. 单击目标应用名称(role-sso-test)后,在Assignments页签下,单击Assign > Assign to People
      3. 单击目标用户(test@example.com)后的Assign
      4. 选择approle为admin。
      5. 单击Save and Go Back
      6. 单击Done
    • 将用户加入组,为组分配应用。
      1. 在Okta顶部菜单栏,先单击Directory > Groups,然后单击Add Group,创建一个组。okta_group
      2. 单击组名称,然后单击Manage People,添加用户到组中。
      3. 在Okta顶部菜单栏,单击Applications
      4. 单击目标应用名称(role-sso-test)后,在Assignments页签下,单击Assign > Assign to Groups
      5. 单击目标组后的Assign
      6. 选择approle为admin。
      7. 单击Save and Go Back
      8. 单击Done
      说明 如果一个用户属于多个组,生效的属性值只能有一个,即在应用的Assignments页签下第一个加入的组的相应属性会生效。如果用户所属的组发生变化,则会影响approle的取值。详情请参见Okta用户指南

结果验证

  1. 在Okta顶部菜单栏,单击Applications > Applications
  2. 单击应用名称(role-sso-test)。
  3. General页签下的App Embed Link区域,获取登录URL。App Embed Link
  4. 打开另一个浏览器,输入获取到的URL,用test@example.com登录。
    如果成功跳转到您设置的Default RelayState对应页面(或默认的阿里云控制台首页),则说明登录成功。successful result

(可选)在Okta中配置用户对应的多个角色

如果您需要让用户对应阿里云的多个角色,则必须使用Group Attribute Statement,借助Group Name进行配置。具体的配置方法如下:

  1. 创建多个组。其组名应按照SAML断言中Role Attribute要求的格式,例如:acs:ram::177242285274****:role/admin,acs:ram::177242285274****:saml-provider/okta-provider。add group
  2. 将test@example.com加入多个组。
  3. 在应用的SAML Settings中,删除Role所对应的attribute statement,添加一个Group Attribute Statement,Filter应确保能够过滤出上述组名,例如:Start with acs:ram。group Attribute
  4. 进行上述配置后,再次使用test@example.com登录阿里云时,该用户将会选择登录的角色。Role sign in

关于Okta的相关操作,详情请参见Okta用户指南