ADFS 2.0 配置简介 PartⅢ – 声明规则语言
上一篇我们最终把 ADFS 与应用之间的信任关系建立起来了,但是应用接收到的声明信息只有默认的两个,这次我们就来学学怎么配置声明。
一.声明存储配置
- ADFS 目前默认支持三种方式的声明值存储,另外还有自定义存储,不过我没去研究


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

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 == ""]
&&
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 知识都是从上边看来的。
ADFS 2.0 配置简介 PartⅢ – 声明规则语言的更多相关文章
- ADFS 2.0 配置简介 PartⅡ – 配置 ADFS 信任关系
ADFS 与应用程序间的各种验证是基于信任关系的,在 ADFS 服务器配置好要信赖的应用程序(以 URL 为标识)后,应用程序再通过指定认证服务器来将用户引导至 ADFS 登录页,登录完成后再将用户的 ...
- ADFS 2.0 配置简介 PartⅠ – 安装ADFS
Active Directory Federation Service 也即联盟身份认证服务是微软的单点登录解决方案 (SSO),配置步骤相当多,中文资料也比较少,写在这里希望对后来人有所帮助 ...
- SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战
补充:SpringBoot启动日志 1.深入SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战(核心知识) 简介:讲解SpringBoot里面Filter ...
- TP 5.0 架构 简介
TP 5.0 架构 简介 thinkphp 5.0 为API开发而设计的的高性能框架,是与以往thinkphp5.0以下版本大不相同的新型框架,病对以颠覆和重构版本,采用全新的架构思想,引入了更多的P ...
- Configuration所有配置简介
// 内存缓存的设置选项 (最大图片宽度,最大图片高度) 默认当前屏幕分辨率 // .memoryCacheExtraOptions(480, 800) // 硬盘缓存的 ...
- Hadoop-2.0 目录简介
Hadoop-2.0 目录简介 一.目录结构 将下载的压缩包解压: 解压后文件夹如下: 二.各文件夹目录结构 1.bin:Hadoop2.0的最基本管理脚本和使用脚本所在目录.这些脚本是sbin目录下 ...
- Django中的路由配置简介
Django中的路由配置简介 路由配置(URLconf)就是Django所支撑网站的目录.其实,我们利用路由交换中的"寻址"的概念去理解Django的路由控制会简单很多,它的本质就 ...
- WebService之Axis2(1):用POJO实现0配置的WebService
Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持S ...
- OpenID Connect Core 1.0(九)声明(Claims)
5 声明(Claims) 这一节说明客户端如何获取关于终端用户声明和验证事件.它还定义了一组标准的基本声明配置.预定义一组可请求的声明,使用特定的scope值或能用于请求参数中的个人声明.声明可以直接 ...
随机推荐
- Android Notification (转)
上回我们提到在4.0ICS之后,Google为Android平台的Notification这把“倚天剑”注入了更多新鲜的元素,使其更加实用美观.Notification的样式从此变得丰富起来,以适应于 ...
- @using (Html.BeginForm())参数示例
原文:@using (Html.BeginForm())参数示例 1.指定表单提交方式和路径等 @using (Html.BeginForm("Index", "Home ...
- Android变化如何破解几场金
我们在玩游戏的总会遇到一些东西需要购买,但是,我们可能要花钱,那么我们应该怎么办呢?这与游戏的插.我们在这里谈论的Android游戏,搜索互联网上的移动端游戏插件,您可能会发现一个叫段:八门神器.ap ...
- 《Javascript权威指南》十六学习笔记:BOM资源---BOM基本应用
BOM基本应用包括:管理浏览器历史记录.得到处理和解决浏览器的信息.本文介绍了这些应用程序. 一.浏览历史管理 1.history对象的方法和属性 History 对象包括用户(在浏览器窗体中)訪问过 ...
- sql小总结2
SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录.这意味着该字段将以 NULL 值保存. NULL 值的处理方式与其他值不同. NULL ...
- js 正则学习小记之匹配字符串
原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...
- 词组缩写(isalpha()的应用)
Problem Description 定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写.比如,C语言里常用的EOF就是end of file的缩写. Input 输入的第一行是一个整数 ...
- linux通过key区别登陆的人
key区分登录用户 脚本放 /etc/profile.d,会默认登录的时候执行, 类似于 #!/bin/bash # filename: /etc/profile.d/set_log_file.sh ...
- Unity3D专访——真正的面试
本来想写一系列的,一半的攻击,现在面试的水.人之奸,用大哥的话说,要走新手是做螺丝钉和抹布用的.还有一半是对出出学校的或者是自废武功转3d的朋友们提供一个比較有价值的參考. 只是我时间实在仓促.没有保 ...
- SSAS系列——【02】多维数据(维度对象)
原文:SSAS系列——[02]多维数据(维度对象) 1.维度是什么? 数学中叫参数,物理学中是独立的时空坐标的数目.0维是一点,1维是线,2维是一个长和宽(或曲线)面积,3维是2维加上高度形成体积面. ...





