对于特定用例,我们需要将外部用户添加到AD,并允许这些用户通过AD FS登录到外部服务。
所有内容都是在考虑内部用户的情况下设置的,因此我们编写了如下声明规则:
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"), query = ";sAMAccountName;{0}", param = c.Value);
基本上,这是LDAP属性" SAM-Account-Name"和传出声明类型"给定名称"。这适用于内部用户。
对于外部用户,有一个用例,其中外部站点中的用户名应该是AD中使用的电子邮件地址。最简单的方法是在sAMAccountName中填写电子邮件地址,但它不允许使用@符号。
所以我正在搞乱索赔转换规则,并认为我可以尝试添加两个条件声明规则,如下所示:
内部用户:
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", Value =~ "domain.com$"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"), query = ";sAMAccountName;{0}", param = c.Value);
外部用户:
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", Value !=~ "domain.com$"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"), query = ";mail;{0}", param = c.Value);
第一个声明规则检查电子邮件地址是否以" domain.com"结尾,如果是,则使用sAmAccountName(内部用户)。
第二个声明规则正好相反:如果它不以" domain.com"结尾,它将使用mail属性(外部用户)。
但可惜,它不起作用(任何一个单独测试)。
我的方法有什么问题?