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

一.声明存储配置

  1. 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Ⅲ – 声明规则语言的更多相关文章

  1. ADFS 2.0 配置简介 PartⅡ – 配置 ADFS 信任关系

    ADFS 与应用程序间的各种验证是基于信任关系的,在 ADFS 服务器配置好要信赖的应用程序(以 URL 为标识)后,应用程序再通过指定认证服务器来将用户引导至 ADFS 登录页,登录完成后再将用户的 ...

  2. ADFS 2.0 配置简介 PartⅠ – 安装ADFS

        Active Directory Federation Service 也即联盟身份认证服务是微软的单点登录解决方案 (SSO),配置步骤相当多,中文资料也比较少,写在这里希望对后来人有所帮助 ...

  3. SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战

    补充:SpringBoot启动日志 1.深入SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战(核心知识) 简介:讲解SpringBoot里面Filter ...

  4. TP 5.0 架构 简介

    TP 5.0 架构 简介 thinkphp 5.0 为API开发而设计的的高性能框架,是与以往thinkphp5.0以下版本大不相同的新型框架,病对以颠覆和重构版本,采用全新的架构思想,引入了更多的P ...

  5. Configuration所有配置简介

    // 内存缓存的设置选项 (最大图片宽度,最大图片高度) 默认当前屏幕分辨率                // .memoryCacheExtraOptions(480, 800) // 硬盘缓存的 ...

  6. Hadoop-2.0 目录简介

    Hadoop-2.0 目录简介 一.目录结构 将下载的压缩包解压: 解压后文件夹如下: 二.各文件夹目录结构 1.bin:Hadoop2.0的最基本管理脚本和使用脚本所在目录.这些脚本是sbin目录下 ...

  7. Django中的路由配置简介

    Django中的路由配置简介 路由配置(URLconf)就是Django所支撑网站的目录.其实,我们利用路由交换中的"寻址"的概念去理解Django的路由控制会简单很多,它的本质就 ...

  8. WebService之Axis2(1):用POJO实现0配置的WebService

    Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持S ...

  9. OpenID Connect Core 1.0(九)声明(Claims)

    5 声明(Claims) 这一节说明客户端如何获取关于终端用户声明和验证事件.它还定义了一组标准的基本声明配置.预定义一组可请求的声明,使用特定的scope值或能用于请求参数中的个人声明.声明可以直接 ...

随机推荐

  1. ASP.Net MVC View

    ASP.Net MVC View(视图)   View视图职责是向用户提供界面.负责根据提供的模型数据,生成准备提供给用户的格式界面. 支持多种视图引擎(Razor和ASPX视图引擎是官方默认给出的, ...

  2. 【年终分享】彩票数据预测算法(一):离散型马尔可夫链模型实现【附C#代码】

    原文:[年终分享]彩票数据预测算法(一):离散型马尔可夫链模型实现[附C#代码] 前言:彩票是一个坑,千万不要往里面跳.任何预测彩票的方法都不可能100%,都只能说比你盲目去买要多那么一些机会而已. ...

  3. ABP应用层——应用服务(Application services)

    ABP应用层——应用服务(Application services) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之15.ABP应用层——应用服务(Applic ...

  4. DevExpress XtraReports 入门五 创建交叉表报表

    原文:DevExpress XtraReports 入门五 创建交叉表报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更多的人不会像我这样浪 ...

  5. 平均得分 【杭州电-HDOJ-2023】 附加题+详细说明

    /* 平均得分 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  6. SSH框架总结(帧分析+环境结构+示例源代码下载)

    首先,SSH不是一个框架.而是多个框架(struts+spring+hibernate)的集成,是眼下较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

  7. Matlab曲面拟合和插值

    插值和拟合都是数据优化的一种方法,当实验数据不够多时常常须要用到这样的方法来绘图. 在matlab中都有特定的函数来完毕这些功能. 这两种方法的确别在于: 当測量值是准确的,没有误差时,一般用插值: ...

  8. mac_开启ftp并访问

    [启动&关闭] mac下一般用smb服务来进行远程文件访问,但要用FTP的话,高版本的mac os默认关掉了,可以用如下命令打开: sudo -s launchctl load -w /Sys ...

  9. crawler_基于块儿统计正文抽取_改进版

    在线查看效果:http://tool.haoshuju.cn/ import java.util.ArrayList; import java.util.Arrays; import java.uti ...

  10. android之【本地通知Notification】

    public class NotificationTest extends Activity { static final int NOTIFICATION_ID = 0x1123; @Overrid ...