编写自定义索赔发布规则

时间:2016-01-05 14:00:32

标签: windows windows-server-2012 adfs

对于特定用例,我们需要将外部用户添加到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属性(外部用户)。

但可惜,它不起作用(任何一个单独测试)。

我的方法有什么问题?

0 个答案:

没有答案