ADFS 2.0 配置简介 PartⅢ – 声明规则语言

    上一篇我们最终把 ADFS 与应用之间的信任关系建立起来了,但是应用接收到的声明信息只有默认的两个,这次我们就来学学怎么配置声明。

 

一.声明存储配置

  1. ADFS 目前默认支持三种方式的声明值存储,另外还有自定义存储,不过我没去研究
    1. 配置声明存储
    2. 三种存储

二.编辑预定义声明

  1. 编辑声明规则
  2. 以LDAP方式发送
  3. 配置电子邮件声明
  4. 编辑电子邮件
  5. 查看电子邮件声明
  6. 获得邮件信息

三.编写自己的定制声明

    如果你需要编写自定义的声明规则,那么你需要掌握一种描述声明的语法,很简单的,首先让我们看看上边配置的电子邮件声明生成的语句

查看邮件声明语句

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> 
issue(store = "Active Directory", type = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"),
query = ";mail;{0}", param = c.Value);

可以看到符号 “=>”将声明语句分隔成两部分,第一句的 “c:[Type == ….]”是条件,第二句的 “issue(store=…)”是发布,意思是说只有当条件为真才会发布该声明,如果条件不填写,默认为真,直接发布声明,比如我们可以发布一个公司名称的声明如下

=> issue(type = ("http://test.com/company"),value = "CHK");

语句可以使用多个条件,,中间使用 && 连接,比如以下声明要求手机号为 “123”和电子邮件为“a@a.com”才发布角色声明

c1:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/phonenumber", Issuer == "AD AUTHORITY", Value == "123"]
&&
c2:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/emailaddress", Issuer == "AD AUTHORITY", Value == "a@a.com"]
 => issue(type = ("http://test.com/role"), value = "Unknow");

还可以变更声明的存储位置,使用特殊的查询语句,比如使用 SQL 存储声明的话,可以写出如下语句

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/accountname", Issuer == "AD AUTHORITY"]
=>
issue(store = "{SQL存储的名称,在自定义声明存储配置}", type = "http://test.com/phonenumber",
query = "Select phonenumber from UserDetail where userName = {0}", param = c.Value)

多个参数使用逗号隔开, “c.Value”其实取的就是条件语句中 “c”这个声明对象也即用户的账户名

另外这种声明语言还支持简单的几个函数,比如值以某个字符串开头,以某个字符串结尾等,这里就不详细赘述了。

我们另外看看一个比较有趣的关键字 add.

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/accountname", Issuer == "AD AUTHORITY", Value == "Administrator"]
=>
add(type = "http://test.com/role", value= "管理员")
c1:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/accountname", Issuer == "AD AUTHORITY", Value == "Administrator"]
&&
c2:[Type == "http://test.com/role"]
=>
issue(Claim = c2)

第一段声明使得用户名为 Administrator 的用户可以获得管理员角色的声明,类似的用法还可以用在标识用户的地区,比如北京就增加一个首都之类的声明,也是挺方便的。

最后再说两个比较常用的关键字 EXISTS 和 Not EXISTS,其实用法跟 SQL 语句一样啦

EXISTS([type == "http://test.com/emailaddress"])
=> issue(type = http://test.com/role, value = "Email User");
NOT EXISTS([type == "http://test.com/location"])
=> add(type = "http://test.com/location", value = "Unknown");

还有一些我没讲到的语法细节,有兴趣的可以去这篇博客看看,注意是英文的,当然我都能看懂您就别担心了。

ADFS 的基本配置大概就到这了,下次有机会讲讲多个公司间 ADFS 服务的配置,还有 ADFS 的代理以便员工外网访问,最好能把 ACS(社交服务账户如 Facebooke、GoogleAccount 之类与 ADFS 的集成) 也讲一下。

如果您等不及我的博客,这里推荐一本 PDF 指导书籍,写得相当好,我大部分 ADFS 知识都是从上边看来的。

posted @ 2014-07-27 21:14  灰机_不会飞  阅读(1899)  评论(0编辑  收藏  举报