把几个云都对接完了,需要为华为云单独写一篇文章,因为它不太一样,“遥遥领先”。
第一个不同点,华为云没有角色的概念,需要配置一个身份转换规则,将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}"]
凑合用吧。