
# 通过OneAccess免密登录多个华为云账号（SAML-虚拟用户SSO）
本文以SAML协议为例介绍如何实现使用OneAccess免密登录多个华为云账号。如需了解华为云身份提供商详情，请参见[身份提供商概述](https://support.huaweicloud.com/usermanual-iam/iam_08_0001.html)。
#### 在华为云上创建身份提供商
在华为云控制台创建身份提供商，配置身份提供商的元数据文件后，可以在华为云中建立对OneAccess的信任关系。
1. 登录OneAccess管理门户，下载OneAccess系统的元数据文件（metadata文件）。 
   1. 登录OneAccess管理门户。
   
   2. 在导航栏中，选择"设置 \> 服务配置"。
   
   3. 在"服务配置"页面，单击"IDP配置"。
   
   4. 在弹出的IDP配置页面，单击右上角的"下载IDP元数据"，数据会自动保存。
   
   
   
   
2. 参考[在华为云上创建身份提供商](https://support.huaweicloud.com/usermanual-iam/iam_08_0003.html#section2)创建身份提供商 ，其中"类型"选择"虚拟用户SSO"。
   
   ![](https://support.huaweicloud.com/bestpractice-oneaccess/public_sys-resources/note_3.0-zh-cn.png)
   - 身份提供商名称不能重复，建议以域名唯一标识命名。
   
   - 虚拟用户SSO定义可参考[虚拟用户SSO与IAM用户SSO的适用场景](https://support.huaweicloud.com/usermanual-iam/iam_08_0251.html)。
   
   - 一个华为云账号只能存在"IAM用户SSO"和"虚拟用户SSO"中的一种类型的身份提供商。
    
   
   
3. 获取华为云登录链接中的domain_id和idp的值。
   
   ![](https://support.huaweicloud.com/bestpractice-oneaccess/zh-cn_image_0000002106445202.png)
   
   
   
4. 参考[在华为云上配置元数据文件](https://support.huaweicloud.com/usermanual-iam/iam_08_0003.html#section3)把OneAccess IdP的Metadata文件配置到华为云。
5. 参考[配置身份转换规则](https://support.huaweicloud.com/usermanual-iam/iam_08_0004.html#section1)在华为云上配置身份转换规则，使得OneAccess用户拥有华为云访问云服务和资源的权限。
   
   以每个OneAccess用户都对应同一个IAM用户组，登录华为云之后，子用户名称显示为OneAccess用户名为例，转换规则配置如下：
   ```
   [
     {
       "remote": [
         {
           "type": "name"
         }
       ],
       "local": [
         {
           "user": {
             "name": "{0}"
           }
         },
         {
           "group": {
             "name": "admin"
           }
         }
       ]
     }
   ]
   ```
   其中，remote为OneAccess映射到IAM的信息，取其中的name字段，可取的映射字段可以参考[2]。
   local为IAM本地的信息，其中user为IAM的用户信息，其中的name为展示的子用户名称，{0}取remote中的第一个字段。group为IAM的用户组信息，表示所有用户都映射到admin的用户组，拥有其所有权限。
   同理，也可以在remote中添加多个字段，将其中某个字段设置为用户组名称，来实现不同的用户对应不同的用户组。
   ```
   [
     {
       "remote": [
         {
           "type": "name"
         },
         {
           "type": "Roles"
         }
       ],
       "local": [
         {
           "user": {
             "name": "{0}"
           }
         },
         {
           "groups": "{1}"
         }
       ]
     }
   ]
   ```
   其中，remote为多映射一个Roles字段（可使用用户属性定义中的自定义字段，多值类型），可以为单值，也可以为多值。
   local为使用groups，可以映射到多个IAM用户组，取remote中的第二个Roles字段。
   
   
6. 在其他华为云账号上面重复[2]\~[5]进行配置。
#### 建立OneAccess对华为云的信任关系
在OneAccess中配置华为云的元数据文件，以建立OneAccess对华为云的信任。
1. 在OneAccess上添加华为云应用。 
   1. 登录OneAccess管理门户，选择"资源 \> 应用"。
   
   2. 在应用页面，单击"新增预集成应用"。
   
   3. 在新增预集成应用页面，单击"华为云"应用。
   
   4. 在弹出的添加应用页面，确认通用信息，单击"下一步"。
   
   5. 在认证参数配置页面，选择"导入SP应用元数据 \> 选择文件"，选择获取的华为云元数据文件。系统会自动上传文件并提取元数据。
      ![](https://support.huaweicloud.com/bestpractice-oneaccess/public_sys-resources/note_3.0-zh-cn.png)
      - 预集成应用为OneAccess专业版用户功能，如果是OneAccess基础版用户，请参考[在OneAccess中添加企业应用](https://support.huaweicloud.com/bestpractice-oneaccess/oneaccess_05_0022.html#oneaccess_05_0022__section8919141211415)创建自定义应用后进行[1.e]操作。
      
      - 在<https://auth.huaweicloud.com/authui/saml/metadata.xml>下载华为云元数据文件，并设置文件名称，例如"SP-metadata.xml"。
      
      - OneAccess同时支持"选取文件"和"手动输入配置数据"方式配置元数据，了解详情请参考[在OneAccess中配置元数据文件](https://support.huaweicloud.com/bestpractice-oneaccess/oneaccess_05_0022.html#oneaccess_05_0022__section7213193111510)。
        
   
   6. 待"选取文件"变为"√"时，代表系统已提取元数据，单击"下一步"，成功添加华为云应用。
   
   7. 在认证集成页面，在"参数配置"页签，单击"编辑"，将"Single Logout URL"对应值中的"/saml/LogoutServiceHTTPRedirect"替换为"/logout"。
   
   
   
   
2. 配置OneAccess与华为云之间的映射关系。
   
   1. 单击已添加的华为云应用，在应用信息页面，单击应用图标，进入应用详情页面。
   
   2. 选择"认证集成 \> 映射配置"，单击"添加映射"，建立OneAccess与华为云之间的属性映射。参数详细说明可参考[映射配置](https://support.huaweicloud.com/bestpractice-oneaccess/oneaccess_05_0022.html#oneaccess_05_0022__section1542182013529)。
   
   3. 选择"认证集成 \> 映射配置"，单击"添加映射"，添加应用属性名为"IAM_SAML_Attributes_identityProviders"的映射，映射类型为"固定属性值"，值为"iam::{domain_id}:identityProvider:{idp_id}"，其中"{domain_id}"为步骤[3]中获取的domain_id，"{idp_id}"为步骤[3]中获取的idp_id，支持多个华为云账号的拼接，使用";"进行分隔，实现跳转过程中选择某个华为云账号跳转，两个华为云账号时值举例如下：
      iam::657ba0e\*\*\*\*\*\*\*\*\*\*\*19fd684d8758c:identityProvider:SAML-IAM;iam::e35f949b3\*\*\*\*\*\*\*\*\*2b79ba14839c:identityProvider:SAML-OneAccess
      
   
   4. （可选）单击"添加映射"，添加应用属性名为"IAM_SAML_Attributes_redirect_url"的映射，映射类型为"固定属性值"，值为华为云Console中的特定业务页面（如果业务地址中带有"agencyId=\*\*\*\&"字段，需要将该字段删除），可以实现单点登录直接跳转至特定业务页面，如果不添加，默认跳转华为云主页面。
   
   
   
   
3. 在OneAccess给用户授予华为云访问权限。 
   在华为云应用详情页面，选择"授权管理 \> 应用账号"，单击"添加账号"，按需勾选账号，单击"保存"，所选用户即可在OneAccess中免密访问华为云。
   
   
 
#### OneAccess用户登录验证
在OneAccess中授予华为云应用访问权限的用户，登录OneAccess用户门户，单击华为云应用，选择需要访问的身份提供商，即可进入华为云控制台首页访问云服务。
