
# 通过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元数据"，数据会自动保存。 ![](https://support.huaweicloud.com/bestpractice-oneaccess/zh-cn_image_0000001564261437.png)
      
   
   
   
   
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. 获取华为云登录链接。
   
   ![](https://support.huaweicloud.com/bestpractice-oneaccess/zh-cn_image_0000002142126453.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字段。
   
   
#### 建立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. 在OneAccess中配置华为云登录入口。 
   在华为云应用详情页面，选择"登录配置 \> 网站应用"，单击"编辑"，将挂接URL替换为[3]中获取的"登录链接"，单击"确定"保存此次编辑。
   图1编辑挂接URL   
   ![](https://support.huaweicloud.com/bestpractice-oneaccess/zh-cn_image_0000001486244804.png)
   ![](https://support.huaweicloud.com/bestpractice-oneaccess/public_sys-resources/note_3.0-zh-cn.png)
   如果需要跳转华为云Console中的特定业务页面，需要对华为云创建的身份提供商的"登录链接"进行拼接后填入挂接URL中，此处以跳转CodeArts服务页面为例进行说明：
   华为云创建的身份提供商的"登录链接"为：https://auth.huawei.com/authui/federation/websso?domain_id=e35f94\*\*\*\*\*\*\*\*\*\*\*\*14839c\&idp=SAML-OneAccess\&protocol=saml
   CodeArts服务地址为：https://console.huaweicloud.com/devcloud/?locale=zh-cn#
   如果服务地址中带有"agencyId=\*\*\*\&"字段，需要将该字段删除后，使用"\&service="将两个地址进行拼接后填入挂接URL中：
   https://auth.huawei.com/authui/federation/websso?domain_id=e35f94\*\*\*\*\*\*\*\*\*\*\*\*14839c\&idp=SAML-OneAccess\&protocol=saml\&service=https://console.huaweicloud.com/devcloud/?locale=zh-cn#
   
   
4. 在OneAccess给用户授予华为云访问权限。 
   在华为云应用详情页面，选择"授权管理 \> 应用账号"，单击"添加账号"，按需勾选账号，单击"保存"，所选用户即可在OneAccess中免密访问华为云。
   
   
 
#### OneAccess用户登录验证
在OneAccess中授予华为云访问权限的用户，登录OneAccess用户门户，单击华为云应用即可进入华为云控制台首页访问云服务。
