fangpsh's blog

Authentik 集成华为云认证登录

把几个云都对接完了,需要为华为云单独写一篇文章,因为它不太一样,“遥遥领先”。

第一个不同点,华为云没有角色的概念,需要配置一个身份转换规则,将SAML带过来的角色转换为华为云的用户组。转换规则看起来设计的很强大,实际没啥用,徒费心智。

如果有网友懒得看规则,可以直接抄这个:

[
          {
                    "remote": [
                              {
                                        "type": "http://schemas.goauthentik.io/2021/02/saml/username"
                              },
                              {
                                        "type": "huaweiIAMGroupName"
                              }
                    ],
                    "local": [
                              {
                                        "user": {
                                                  "name": "{0}"
                                        }
                              },
                              {
                                        "groups": "{1}"
                              }
                    ]
          }
]

type: http://schemas.goauthentik.io/2021/02/saml/username 可以改成你自定义的RoleSessionName Attribute Name。这就引出第二个不同点了。

第二个不同点,它没有类似其他云的显式RoleSessionName,需要你自定义,习惯一下。

第三个不同点,如果你的用户有多个角色,每个角色都不一样,华为云是将所有角色转换为组,然后将组权限做并集。是的,目前没法选择特定角色登录。几年前在用shibboleth做第一版IdP的时候反馈过,没理我。这次和售后拉研发上会反馈了,说会安排。但是后来又说不做了,给了一个新方案IAM身份中心如何对接Okta 看得我头大,先不搞了。凑合用吧,有兴趣的网友可以试一试。估计现在维护的研发也是在维护历史项目,不想动💩⛰。

第四个不同点,从统一认证IAM发起登录,和从IdP发起登录会冲突。前者登录之后写入的cookies 会导致IdP发起的登录出错,服务端返回:

The application has malfunctioned.
Please contact technical support to solve this issue.
Error code: E0019
Error message: No InResponseTo attribute in SAMLResponse, please troubleshoot on IdP side

也就是只能二选一,和售后反馈了说会修,今天问了下说发布遇到bug又回退了,不知道啥时候能修好。

第五个不同点,如果你在同个厂商有多个主体账号,在其他云可以传递多个arn拼凑起来,登录之后云厂商会列出多个主体账号下不同角色供你选择。华为云的huaweiIAMGroupName 属性和其他厂商的不一样,不携带account 信息,从这篇文章里看到一个参数:IAM_SAML_Attributes_identityProviders,创建一个SAML Provider Property Mapping,可以达到类似效果,返回格式如下:

return [ "iam::{domain_id_1}:identityProvider:{idp_id_1}",
         "iam::{domain_id_2}:identityProvider:{idp_id_2}",
         "iam::{domain_id_3}:identityProvider:{idp_id_3}"]

凑合用吧。