
# 使用委托方式配置自定义身份代理
如果您的[企业IdP](https://support.huaweicloud.com/usermanual-iam/iam_08_0001.html#iam_08_0001__li1994573416364)不支持SAML、OIDC协议，可以使用自定义身份代理，通过编写代码获得华为云登录链接，使企业用户通过企业IdP验证身份后，即可登录华为云。
![](https://support.huaweicloud.com/usermanual-iam/public_sys-resources/note_3.0-zh-cn.png)
自定义身份代理适用于不支持SAML、OIDC的企业IdP，如果您使用了支持SAML、OIDC的IdP（身份提供商），推荐您通过配置[联邦身份认证](https://support.huaweicloud.com/usermanual-iam/iam_08_0002.html)实现用户使用企业管理系统账号单点登录华为云。
#### 前提条件
- 企业已有企业管理系统。
- 企业管理员在华为云上注册了可用的账号（账号名以DomainA为例），并已在IAM中创建用户组（用户组名以GroupC为例）并授予Agent Operator权限，具体方法请参见：[创建用户组并授权](https://support.huaweicloud.com/usermanual-iam/iam_03_0001.html)。
 
#### 操作步骤
1. 在DomainA中创建IAM用户（用户名以UserB为例），并加入GroupC用户组中，具体方法请参见：[用户组添加用户](https://support.huaweicloud.com/usermanual-iam/iam_03_0002.html)。
   
   ![](https://support.huaweicloud.com/usermanual-iam/public_sys-resources/note_3.0-zh-cn.png)
   请确认该IAM用户支持**编程访问** 华为云服务。如需修改IAM用户访问方式，请参考：[管理IAM用户的基本信息](https://support.huaweicloud.com/usermanual-iam/iam_02_0002.html)。
   
   
2. 将UserB的[访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)或用户名和密码（推荐使用访问密钥）配置到企业IdP的配置文件中，以便获取用户认证token和调用API。为了保障您的账号安全，密码和访问密钥建议加密存储。
3. 在[IAM控制台](https://console.huaweicloud.com/iam/?locale=zh-cn#/iam/users)左侧导航栏选择"委托"，单击右上方的" 创建委托"。
4. 在创建委托页面，设置委托参数。
   
   "委托名称"以"testagency"为例，"委托类型"必须选择"普通账号"，"委托的账号"填写"DomainA"，"持续时间"根据具体情况选择，并单击"下一步"。
   图1创建委托   
   ![](https://support.huaweicloud.com/usermanual-iam/zh-cn_image_0000001950154641.png "点击放大")
   
   
5. 选择权限的作用范围，勾选需要授予委托的权限，给委托授权。
6. 在企业IdP创建用户组"testagency"（与[4]中的委托名称相同），将企业本地用户按需加入本地用户组，授予其自定义代理登录华为云时所需权限，具体方法请参见企业IdP帮助文档。
7. 企业本地用户登录企业管理系统后，访问企业IdP的自定义代理，从委托列表（由安全管理员来查询租户的委托列表，根用户默认为安全管理员）中选择所需要使用的委托，具体方法请参见企业管理系统帮助文档。 
   ![](https://support.huaweicloud.com/usermanual-iam/public_sys-resources/note_3.0-zh-cn.png)
   自定义代理的委托列表是企业IdP创建的用户组名称与华为云创建的委托名称的交集。
   
   
8. 企业IdP自定义代理根据委托，携带IAM用户userB的token调用API（POST /v3.0/OS-CREDENTIAL/securitytokens），获取具有临时身份的securityToken，调用方法请参见：[通过委托获取临时AK/SK和securitytoken](https://support.huaweicloud.com/zh-cn/api-iam/iam_04_0101.html)。
   
   ![](https://support.huaweicloud.com/usermanual-iam/public_sys-resources/note_3.0-zh-cn.png)
   通过委托获取securitytoken时，请求体中必须填写**session_user.name**参数。
   
   
9. 企业IdP自定义代理携带获取到的临时AK/SK和securitytoken通过全局域名（iam.myhuaweicloud.com）调用API（POST /v3.0/OS-AUTH/securitytoken/logintokens）获取登录票据loginToken。登录票据位于Response Header中的X-Subject-LoginToken。获取方式请参见：[获取自定义代理登录票据](https://support.huaweicloud.com/api-iam/iam_14_1101.html)。
   
   ![](https://support.huaweicloud.com/usermanual-iam/public_sys-resources/note_3.0-zh-cn.png)
   - 调用API（POST /v3.0/OS-AUTH/securitytoken/logintokens）获取登录票据loginToken时，需要使用全局域名：iam.myhuaweicloud.com。
   
   - logintoken是系统颁发给自定义代理用户的登录票据，承载用户的身份、session等信息，默认有效期为10分钟。调用FederationProxyUrl登录云服务控制台时，需要使用logintoken进行认证。
   
   - 调用API（POST /v3.0/OS-AUTH/securitytoken/logintokens）时可以设置logintoken的有效时间，有效时间设置范围为10分钟\~12小时。如果传入的值大于临时安全凭证securitytoken剩余的过期时间，则使用临时安全凭证securitytoken剩余的过期时间。
    
   
   
10. 企业IdP自定义代理根据规范创建云服务登录地址FederationProxyUrl，作为Location返回给浏览器。FederationProxyUrl如下： 
    *https://auth.huaweicloud.com/authui/federation/login?idp_login_url={enterprise_system_loginURL}\&service=* {console_service_region_url}*\&logintoken={logintoken}*
    示例：
    *https://auth.huaweicloud.com/authui/federation/login?idp_login_url=https%3A%2F%2Fexample.com\&service=https%3a%2f%2fconsole.huaweicloud.com%2fapm%2f%3fregion%3dcn-north-4%23%2fapm%2fatps%2ftopology\&logintoken=\*\*\*\*\*\**
    表1参数说明 
    | 参数            | 说明            |
    |:---|:---|
    | idp_login_url | 企业管理系统登录地址。   |
    | service       | 需要访问的华为云服务地址。 |
    | logintoken    | 自定义代理登录票据。    |
       
    为了浏览器正常识别参数内容，需要将以上三个参数都进行UrlEncode编码。
    您可以参考以下Demo示例创建云服务登录地址FederationProxyUrl：[使用委托方式创建云服务登录地址](https://support.huaweicloud.com/usermanual-iam/iam_08_1004.html)
    ![](https://support.huaweicloud.com/usermanual-iam/public_sys-resources/note_3.0-zh-cn.png)
    该FederationProxyUrl包含从IAM获得的登录票据，票据用于对访问的用户进行身份验证。FederationProxyUrl需要经过UrlEncode编码。
    
    
11. 华为云认证登录票据loginToken成功后，浏览器自动重定向到需要访问的华为云服务地址，即云服务代理登录地址中**service** 设定的地址，企业用户成功访问华为云的控制台。
    
    loginToken认证失败，则重定向到**idp_login_url**设定的地址。
    
    
 
