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,一经查实,立即删除!

相关文章

ThinkPHP - 6 - 学习笔记(2015.5.4)

解决&#xff1a;OneThink 站点无法被友言uyan后台识别 打开友言uyan插件功能&#xff0c;但OneThink站点无法被友言uyan后台检测到。页面生成的uyan代码为&#xff1a; 1 <!-- UY BEGIN --> 2 <div id"uyan_frame"></div> 3 <script type"…

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

前端第一课&#xff1a;编辑器与PHPSTUDY的安装与配置过程编辑器安装过程1.Visual Studio Code 官网下载软件&#xff0c;解压下载文件&#xff0c;打开安装程序安装至你的计算机。2.安装“Chinese(Simplified)Language Pack for Visual Studio Code” 插件&#xff0c;并重启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十二岁生日&#xff0c;就在生日当天&#xff0c;Google进行了一场宣讲会加笔试。Google果然不一般&#xff0c;宣讲会门外都站满了人&#xff0c;也可见竞争之激烈&#xff0c;据说只需要40个人参加面试&#xff0c;而笔试的人有1000之多&#xff0c;汗………

CodeIgniter配置之config

配置说明 $config[language]&#xff1a;指定项目语言包。需要注意的时Codeigniter自带的类库错误提示语言包位于/system/language/english/目录下&#xff0c;当这里配置非english时&#xff0c; 如果需要用到这些类库&#xff0c;则需要拷贝语言包到指定的目录中&#xff0c;…

VIM 文件编码识别与乱码处理

From: http://edyfox.codecarver.org/html/vim_fileencodings_detection.html 在 Vim 中&#xff0c;有四个与编码有关的选项&#xff0c;它们是&#xff1a;fileencodings、fileencoding、encoding 和 termencoding。在实际使用中&#xff0c;任何一个选项出现错误&#xff0c…

php 动态修改网站配置,动态修改php的配置项

我们一般修改php的配置项都是在php.ini中修改。在php,ini中的修改会影响到所有使用php的程序。假如我想让修改只在某个域名下生效&#xff0c;该如何做呢?使用ini_set() 首先想到的可能是使用ini_set()方法在脚本中修改。但是这个只能修改作用域为PHP_INI_USER和PHP_INI_ALL的…

【Oracle】Python 连接Oracle 数据库

From: http://space.itpub.net/22664653/viewspace-711728 Python 连接Oracle 数据库&#xff0c;需要使用cx_Oracle 包。1 下载cx_Oracle该包的下载地址&#xff1a;http://cx-oracle.sourceforge.net/下载的时候&#xff0c;注意选择与操作系统和oracle版本相对应的cx_Oracle…

php评星,jQuery+PHP星级评分实现方法

搜索热词本例实现的效果&#xff1a;过渡动画显示评分操作。及时更新平均得分和用户所评的分数。后台限制用户重复评分操作&#xff0c;并在前端及时显示。XHTMLHTML结构分为用于显示灰星星div#big_rate、亮星星div#big_rate_up、分数span#s及span#g和提示信息div#my_rate。CSS…

Web Api无法访问 404

最近需要在项目中添加一个Web Api&#xff0c;项目是.net mvc4项目。要想添加一个api&#xff0c;无论你怎么封装&#xff0c;无非就是在Application_Start方法中将WebApi的路由注册进去就行了。例如如下代码&#xff1a; public static class WebApiConfig{public static void…

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

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

python 数据库模块

From: http://www.cnblogs.com/czh-liyu/archive/2008/04/22/1165213.html 目录 专用数据库连接模块 MySQL SQLite PostgreSQL Oracle IBM DB2 SAP DB Infomix Interbase Ingres Sybase SQL Server ThinkSQL Matisse 通用数据库接口模块 ODBC JDBC SQLRelay 其它模块 Gadfly …

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

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

lhgdialogV2.37 使用

/Files/tiger8000/lhgdialogV2.37完整版.rar parent.aspx 父页面&#xff1a; <script src"../lhgdialog/lhgcore.min.js" type"text/javascript"></script> <script src"../lhgdialog/lhgdialog.js" type"text/javascript&…

NGINX + TOMCAT7 + MEMCACHED 实现SESSION 共享

原文地址&#xff1a; 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 //相关包下载&#…