# 创建OIDC身份提供商
IAM OIDC身份提供商是在IAM中定义的一类资源，用于描述支持OpenID Connect（OIDC）标准的外部身份提供商服务，例如Google或GitHub Actions。当你希望在一个兼容OIDC的身份提供商与你的华为云账号之间建立信任关系时，可以使用IAM OIDC身份提供商。这在开发需要访问华为云资源的移动应用或Web应用时非常有用，因为你无需编写自定义登录代码，也无需自行管理用户身份。有关该场景的更多信息，请参阅 [基于OIDC协议的信任委托SSO概述](https://support.huaweicloud.com/usermanual-iam5/iam_01_1321.html)。
你可以通过华为云管理控制台或IAM API来创建和管理IAM OIDC身份提供商。
在创建IAM OIDC身份提供商之后，你还必须创建一个或多个IAM信任委托。信任委托是华为云中的一种身份，但它不像用户那样拥有长期凭证。在该场景中，信任委托会被动态分配给通过你组织的身份提供商认证的OIDC联邦主体。该信任委托允许你的身份提供商向华为云请求临时安全凭证以访问资源。分配给该信任委托的身份策略决定了用户在华为云中可以执行的操作。有关为第三方身份提供商创建信任委托的详细信息，请参阅[创建OIDC身份提供商的信任委托](https://support.huaweicloud.com/usermanual-iam5/iam_01_1304.html)。
#### 前提条件
在创建IAM OIDC身份提供商之前，你必须从你的外部身份提供商获取以下信息。有关如何获取OIDC提供商配置信息的更多内容，请参考你的身份提供商官方文档。
- 请确认你的OIDC身份提供商的公开可访问URL。该URL必须以https://开头。根据OIDC标准，允许包含路径（path）部分，但不允许包含查询参数（query parameters）。通常，该URL仅由主机名或主机名加端口号的形式，例如https://www.idpserver.com或https://idpserver.com或https://www.idpserver.com:443/path。
- 在你的OIDC身份提供商URL末尾添加/.well-known/openid-configuration，即可查看该提供商公开的配置文档和元数据。你必须提供一个 JSON 格式的发现文档（discovery document），其中包含该身份提供商的配置文档和元数据，并且该文档需要能够通过OpenID Connect提供商的URL访问获取。
- 请确认以下值已包含在你的身份提供商的配置信息中。如果你的openid-configuration缺少其中任何字段，则必须更新你的发现文档。具体操作流程会因不同的身份提供商而有所差异，请参考你所使用的身份提供商官方文档来完成此任务。
  - issuer：您的域名的URL。
  
  - jwks_uri：JSON Web Key Set（JWKS）端点，IAM会从该端点获取你的公钥。你的身份提供商必须在openid-configuration中包含一个JWKS端点。该URI用于指定获取公钥的位置，这些公钥将用于验证来自身份提供商的OIDC令牌（ID Token）。
    ![](https://support.huaweicloud.com/usermanual-iam5/public_sys-resources/note_3.0-zh-cn.png)
    JSON Web 密钥集（JWKS）必须至少包含一个公钥，并且最多可包含100个RSA公钥和100个EC公钥。在查找公钥过程中，如果某类公钥（RSA或 EC）的数量达到100且仍未找到匹配的公钥，STS服务则会停止查找并返回错误。 例如：JWKS中包含101个RSA公钥，若目标公钥位于第101位，由于前100个RSA公钥中未找到匹配项，STS服务将直接返回错误。
    
  
  - claims_supported: 表示用户相关信息，用于确保来自身份提供商的OIDC认证响应中包含华为云IAM策略校验联邦主体权限所需的关键属性。有关可用于claims的STS条件键列表，请参阅[STS身份策略授权参考](https://support.huaweicloud.com/api-iam5/iam_02_1125.html)。
    - aud: 你需要确认你的身份提供商在JSON Web Token（JWT）中签发的受众（audience）声明值。aud表示令牌的目标受众，是与应用相关的标识，用于指明令牌的预期接收方。当你在身份提供商处注册移动应用或Web应用时，会生成一个Client ID，用于标识该应用。这个Client ID是应用的唯一标识，并会作为aud声明的一部分传递用于认证。在使用OIDC身份提供商获取临时访问凭证时，aud声明必须与配置的Client ID值一致。
    
    - iat: claims中必须包含iat字段，用于表示OIDC令牌的签发时间。
    
    - iss: 身份提供商的URL。该URL必须以 https:// 开头，根据OIDC标准，允许包含路径（path），但不允许包含查询参数（query parameters）。通常，该URL仅由主机名或主机名加端口号的形式，例如https://www.idpserver.com或https://idpserver.com或https://www.idpserver.com:443/path。
     
  
  - response_types_supported: id_token
  
  - subject_types_supported: public
  
  - id_token_signing_alg_values_supported: RS256, RS384, RS512, ES256, ES384, ES512
    你可以像下面示例中那样包含额外的声明（claims），例如 my_custom_claim，但是STS会忽略这些声明。
    ```
    {
        "issuer": "https://www.idpserver.com",
        "jwks_uri": "https://www.idpserver.com/jwks/keys",
        "claims_supported": [
            "aud",
            "iat",
            "iss",
            "name",
            "sub",
            "my_custom_claim"
        ],
        "response_types_supported": [
            "id_token"
        ],
        "id_token_signing_alg_values_supported": [
            "RS256",
            "RS384",
            "RS512",
            "ES256",
            "ES384",
            "ES512"
        ],
        "subject_types_supported": [
            "public"
        ]
    }
    ```
    
   
 
![](https://support.huaweicloud.com/usermanual-iam5/public_sys-resources/note_3.0-zh-cn.png)
如果您是华为云中国站用户，在配置外部OIDC身份提供商时，请确保所填写的身份提供商相关 URL（例如OIDC身份提供商的URL、JWKS URL等）能够从中国大陆网络环境正常访问。 由于中国大陆网络环境存在访问控制策略，如果身份提供商服务部署在境外且被网络策略（如防火墙）隔离，可能导致华为云无法成功访问该URL，从而引发以下问题：
1. 创建IAM OIDC身份提供商或认证流程异常和失败。
2. 公钥（JWKS）获取失败。
3. OIDC令牌（ID Token）校验失败。
 
因此，建议您在配置前进行连通性验证，确保相关URL在中国大陆网络环境下可访问，且未被防火墙或访问控制策略阻断。 如果您的身份提供商服务无法满足上述访问要求，或者主要部署在境外网络环境中，建议您使用华为云国际站账号进行相关配置与访问，以避免因网络连通性限制导致的使用异常问题。
#### 操作步骤
在创建IAM OIDC身份提供商之前，您必须先在身份提供商处注册您的应用，以获取Client ID（也称为audience）。Client ID是应用的唯一标识符，在您向身份提供商注册应用时由其分配。有关如何获取Client ID的更多信息，请参考您所使用的身份提供商官方文档。
1. 登录[统一身份认证服务新版控制台](https://console.huaweicloud.com/iam5)。
2. 在左侧导航窗格中，选择"身份提供商"，在"OIDC"页签单击右上方的"创建身份提供商"。 
   图1创建身份提供商   
   ![](https://support.huaweicloud.com/usermanual-iam5/zh-cn_image_0000002550988778.png "点击放大")
   
   
3. "类型"选择"OIDC"。
4. 填写"身份提供商名称"。
5. 在"身份提供商 URL"中，输入身份提供商的URL。该URL必须符合以下限制（URL不需要包含/.well-known/openid-configuration后缀）： 
   - URL区分大小写。
   
   - URL必须以https://开头。
   
   
   
   
6. 输入"受众"信息，即向身份提供商注册应用后获得的Client ID，后续您可以使用该应用的OIDC令牌向华为云发起请求。如果您为该身份提供商还有其他Client ID（也称为audiences），可以在之后通过提供商详情页面进行添加。 
   ![](https://support.huaweicloud.com/usermanual-iam5/public_sys-resources/note_3.0-zh-cn.png)
   如果您的身份提供商签发的JWT中包含azp声明，请将该值填写为受众的内容。 如果您的OIDC身份提供商在令牌中同时设置了aud和azp声明，华为云STS将使用azp声明的值作为aud来进行处理。
   
   
7. （可选）输入描述信息。
8. 请核对您所提供的信息。确认无误后，单击"确定"。IAM 将尝试获取并使用 OIDC身份提供商服务器证书的顶级中间CA指纹来创建IAM OIDC身份提供商。 
   ![](https://support.huaweicloud.com/usermanual-iam5/public_sys-resources/note_3.0-zh-cn.png)
   JWKS URL的证书链必须以包含JWKS域名的终端实体证书开始，可以包含任何中间证书，然后以顶级中间CA证书或者根CA证书结尾。如果证书链顺序不同、包含重复证书或其他证书，您将在IAM中创建OIDC身份提供商失败，请修改服务器返回的证书链以解决错误。
   
   
9. 为您的身份提供商分配一个IAM信任委托，以便由该身份提供商管理的外部用户身份能够获得访问您华为云账号中资源的权限。有关为OIDC身份提供商创建信任委托的更多信息，请参阅[创建OIDC身份提供商的信任委托](https://support.huaweicloud.com/usermanual-iam5/iam_01_1304.html)。
   
   ![](https://support.huaweicloud.com/usermanual-iam5/public_sys-resources/note_3.0-zh-cn.png)
   在信任委托的信任策略中使用的OIDC身份提供商必须与信任委托位于同一账号中。
   图2为身份提供商分配信任委托   
   ![](https://support.huaweicloud.com/usermanual-iam5/zh-cn_image_0000002581436387.png "点击放大")
   
   
 
