背景
内部用keycloak实现SSO,近期引入了Office365,需要接入keycloak(saml协议),实现SSO。
遇到的问题
Office365按照官方文档配置后,负责keycloak的同学帮着调试好后,sso总是提示失败。总是提示找不到用户。
按照官方文档 https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-fed-saml-idp 的说明, NameID和IDPEmail 需要传递,也都传递了。
负责跟进Case的小姐姐给的结论是NameID传的值是邮箱前缀或者邮箱,不符合O365的要求,要求传的值必须是ImmutableID,这样才能识别为用户存在。 如图示
KeyCloak 中导入 https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml ,NameID格式只有username、email、transient、persistent4个属性。
处理方式
经过了解ImmutableID 默认是由AD中ObjectGUID base编码而来。 NameID 对应AD中的sAMAccountName字段。 尝试手动设置AzureAD中的ImmutableID属性值为sAMAccountName。
Install-Module AzureAD
Connect-AzureAD
#查询ImmutableID
Get-AzureADUser -Filter "Displayname eq 'shizhenning01'" | fl ImmutableID
#设置ImmutableID
Get-AzureADUser -Filter "Displayname eq 'shizhenning01'" | Set-AzureADUser -ImmutableId "shizhenning01"
再尝试登录,SSO顺利通过。
接下来的问题就是修改AADConnect映射规则,让AD中的sAMAccountName自动映射为ImmutableID,AzureAD中对应的属性sourceAnchor。
对映射规则了解的比较少,尝试增加映射规则,优先级调高,始终不能生效。 开了个Case只需在AADConnect安装过程中选中即可,如图示位置:
这样sAMAccountName字段值会自动同步到AzureAD中用户的ImmutableID值。
标签:AzureAD,sAMAccountName,映射,ImmutableID,SSO,O365,NameID,Keycloak From: https://blog.51cto.com/magic3/12146086