Claims 认证详解(1)

      很多时候,我们进行应用程序之间的交互。比如,一个员工登录了门户网站后,需要访问进销存系统、CRM系统,如果不进行特殊处理,就需要多次输入用户名和密码。用过SharePoint的朋友,可能知道有个“单点登录”的东东是用来解决这个问题的。单点登录并不完美,其中之一就是它将用户名和密码存成明文,一个程序员可能很容易的获得某个用户的用户名和密码,这在涉密的软件中简直是致命的缺陷。

      1

      因此,人们开始重新思索一种更可靠,更实用的认证方式。这时,Claims认证闪亮登场了。其实,Claims认证早就出现了,大概已经有10年的历史了,但是一直没有发扬光大。这次可以说是老树发新芽,Claims认证迎来了第二春。

     Claims认证很难解释清楚,甚至我都找不到一个合适的中文词语来翻译它。只好用一个比喻来说明。

     在实行社保卡之前,我们去医院看病的时候,需要拿着身份证去办理一张就诊卡,办卡的工作人员校验完你的身份证以后,会将你的个人信息录入到卡里面。当你去找医生就诊的时候,医生扫描一下你的就诊卡,就知道了你的所有信息。这个就诊卡就相当于Claims认证中的token,里面的每条信息就是一个Claim.

    2

    这里的就诊卡具有两个特点:(1) 里面包含了认证过的信息,也就是说,医生看到这些信息以后,不需要再去看你的身份证进行验证。(2) 医生需要验证发行者,也就是读磁条的过程。医生一旦确认这个就诊卡是由办卡的工作人员签发的,就可以信任里面的信息。

    以上两个特点就是Claims认证区别于其他认证方式的两点。

    就诊卡对应Claims认证里面的token,就诊卡里面的每条信息对应Claims认证里面的claim.而办卡的工作人员就是token的发行者。

   3

   一个token里面包含用户名,用户email,用户的manager的email等信息。使用claims认证时,很难扩展上面的属性。这就像你使用医院的就诊卡时,上面应该包含什么信息,是由医院软件决定的,如果你自己想增加一个别的属性,必须去改变医院的软件,这通常是很难得。所以尽量使用当前token中包含的属性,不要奢望去使用里面不包含的属性。除非你是卫生部长或者医院院长:(

    Claims认证中有一个很重要的角色“发行者(Issuer)”,对于上面的例子,医院就是cliaims token的发行者。如果在我们自己的应用程序中想要使用claims认证,下面的元素是必不可少的。

    4

 

    我们分析一下我们需要做的事情:一个是Application,就是我们的应用程序,在里面我们要解析Claims token,得到里面包含的信息,这个很容易做到,因为.net framework提供了一些标准的方法;另一个是Issuer,它的作用是验证用户,然后将用户的信息制作成security token发送给我们的Application,这个如果我们自己来做会相当复杂,幸运的是,微软提供了一个标准的Issuer的组件:ADFS.

    ADFS存在于windows server 2008 R2企业版中,全称为Active Directory Federation Services (ADFS) 2.0. ADFS支持多种用户认证方式,比如Kerbos,form验证等,它还支持SQL语句,这样可以从自定义的SQL数据源中提取用户信息。

    Claims认证的其中优点之一是:比如你有很多个用户具有相同的权限,那么对于这些用户,只需要根据他们的角色产生一个claims token,而没有必要产生很多个token,这就大大减少了Application需要处理的认证的数量。

    Claims 认证的具体实施步骤:

    1. 在你的Application中加入逻辑用以支持Claims.

        其中包括验证来自Issuer的token和解析token以便获得Claims信息。Windows Identity Foundation (WIF) 提供了标准的API,这些API既可以在WCF中使用,也可以在ASP.NET程序中使用。使用WIF的方法很简单,只需要在你的程序中引入Microsoft.IdentityModel.dll就可以了,举一些例子:IsInRole, Identity.Name, Identity.Claims等等。

   2。 构建一个Issuer。
        这个使用ADFS就可以了。具体的配置步骤查看ADFS的文档即可。当然,你也可以使用WIF自己构建一个Issuer,那会非常的复杂。

   3。 配置你的Application,使之信任你的Issuer。
        这种信任关系式必须建立的,就像医生必须信任办就诊卡的人员一样。
        这里的关键是一个叫做“集成元数据(federation metadata)”的概念,它是一个Xml文档,这个Xml文档由Issuer提供给你的Application, 包含Issuer的证书,Issuer提供给Application的信息列表,Application用来去获得token的Url和其他一些技术细节,你把它想象成就诊卡上的磁条好了。
        WIF提供了一个标准的向导,可以自动根据这个Xml文档包含的元数据省生成你的Application的认证设置,你只需要提供给Issuer的Url,WIF会自动下载这些元数据并且配置你的Application.

  4. 配置Issuer使它知道你的Application.

      Issuer需要知道关于Application的如下信息:

  •       Application的URL.
  •       Claims提供的属性中,哪些是必须的,哪些是可选的
  •       是否需要对产生的token加密,用什么key来加密。
  •       Application暴漏出来用以接收token的URL.

      WIF提供了一个工具edUtil.exe,可以用以生成一个元数据文档,所以你无需手动进行配置。

  

版权声明:本文原创发表于 博客园,作者为 今夜太冷
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

转载于:https://www.cnblogs.com/time-is-life/archive/2010/09/24/1834045.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php什么设置前端代码,代码编辑器与PHPSTUDY的安装与配置过程(前端第一课)

前端第一课:编辑器与PHPSTUDY的安装与配置过程编辑器安装过程1.Visual Studio Code 官网下载软件,解压下载文件,打开安装程序安装至你的计算机。2.安装“Chinese(Simplified)Language Pack for Visual Studio Code” 插件,并重启v…

重学java基础第二十课:环境配置和第一个helloWorld

大家好 我是歌谣 闲来无事做 不如敲代码 今天大概说如何编译一个简单的helloWorld小案例 安装环境的配置 1首先进入jdk的官网 找到对应的jdk版本 这边一window为例 2接下来--右键--计算机--属性--进行高级系统设置 3在用户变量里面配置 JAVA_HOME:G:\java CLASSPATH:.;%JAV…

vim QuickFix 窗口

From: http://hi.baidu.com/bali5/blog/item/82f87c0ab670a136b0351d4f.html 在上一节的图10中大家可以看到在窗口下面有一个显示查询结果的窗口, 这个窗口中列出了查询命令的查询结果, 用户可以从这个窗口中选择每个结果进行查看, 这个窗口叫"QuickFix"窗口, 以前也…

谷歌笔试题(Google十二岁生日晚)

2010-9-27日是Google十二岁生日,就在生日当天,Google进行了一场宣讲会加笔试。Google果然不一般,宣讲会门外都站满了人,也可见竞争之激烈,据说只需要40个人参加面试,而笔试的人有1000之多,汗………

RHE5服务器配置——Samba服务器

Samba的核心 Samba的核心是两个守护进程,即smbd和nmbd。服务器启动到停止期间持续运行,smba监听139TCP端口;nmbd监听137和 138UDP端口。smbd和nmbd使用的全部配置信息保存在smb.conf文件中,smb.conf向smbd和nmbd两个守护进程说明输…

PHP检查微信域名屏蔽接口,微信域名检测API接口,实时查询域名是否被微信拦截...

微信域名检测API接口的应用场景:由于微信对外部链接内容规范比较严格,所以可能一不小心就会被判定为是违反内容规范的,或被同行恶意举报投诉之类的。那么此时就要用到微信域名检测接口,实时检测域名的状态,实时查询域名…

NGINX + TOMCAT7 + MEMCACHED 实现SESSION 共享

原文地址: http://my.oschina.net/u/1791256/blog/283064 TOMCAT7.0 NGINX MEMCACHED memcached-session-manager 实现SESSION共享 http://blog.csdn.net/nerissa/article/details/18961361 ; //参考博客 http://pan.baidu.com/s/1pJlZ0mB //相关包下载&#…

实验二十四、OSPF 在NBMA 环境中点到点的配置

实验二十四、OSPF 在NBMA 环境中点到点的配置 一、 实验目的 1. 掌握NBMA 环境中点到点的配置 2. 理解NBMA 环境中点到点网络类型的意义 二、 应用环境 在帧中继的网络中,OSPF 的路由更新不能正常进行,需要配置点到点的网络类型保证OSPF 协议的正常运行…

ad从2003升级到2008总结

一、升级前要在2003域控运行adprep命令来扩展2003森林架构和域架构 (adprep命令在2008 r2安装光盘的support\adprep目录。需要将其复制到2003域控中) 源2003 server为64位:adprep.exe 源2003 server为32位:adprep32.exe 转载于:h…

在Xcode6中搭建Python开发环境

http://jingyan.baidu.com/article/f71d60379c73001ab741d14e.html 对于使用Mac电脑,刚入门Python的同学,一定很好奇是不是可以使用Xcode这款IDE工具集成学习Python语言,答案是Yes!网络中有很多使用Xcode5搭建的帖子,现…

设计模式心得:三——命令模式

继续设计模式心得体验——命令模式。 命令模式: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 一般在命令模式中有三个元素,invoker、command、…

React开发(186):react 父调用子组件的方法

<BaseTableSearchsearchParams{baseSearchParams}onSearch{this.handleSearch}onRef{(node) > (this.searchRef node)}highSearch{true}/>

linux命令行快捷键

2019独角兽企业重金招聘Python工程师标准>>> 转自&#xff1a;http://os.chinaitzhe.com/linux/2008-01/119926636930912.html history 显示命令历史列表 ↑(Ctrl p) 显示上一条命令 ↓(Ctrl n) 显示下一条命令 !num 执行命令历史列表的第num条命令 !! 执行上一条…

php css布局技巧,最全的CSS开发常用技巧

css(层叠样式表)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页&#xff0c;还可以配合各种脚本语言动态地对网页各元素进行格式化。CSS 能够对网页中元素位置的排版进行像素级精确控制&…

jQuery实现响应式瀑布流 - 实现灯箱效果

在这之前&#xff0c;有写过一篇关于实现瀑布流的文章&#xff0c;后期有人留言提出需要添加灯箱效果的功能&#xff0c;所以这次则讲述下如何实现此功能。由于该篇接上篇写的&#xff1a;jQuery实现响应式瀑布流效果&#xff08;jQueryflex&#xff09;_jquery瀑布流插件-CSDN…