ADFS 概念与基本开发介绍 (1)

2023-11-19

(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系 me@nap7.com

ADFS 相关开发技术的中文资料相对匮乏,之前再弄这个东西的时候搞的比较辛苦,因此总结此文档,以解后人之忧。

本文会首先介绍与联合身份验证有关的概念及相关的系统设计意图,随后会对 ADFS 联合身份验证的配置过程、结构及处理流程进行阐述。然后会基于已有的系统提出一个支持多 ADFS 联合身份验证的改进实例,并对其结构及处理流程进行阐述。最后会对开发过程中所遭遇的一些问题进行介绍。真诚希望本文能够帮助读者较快地了解联合身份验证的相关知识。

一 ADFS 基本概念与设计意图

1 基本概念阐述

1.1 联合身份验证

联合身份验证(Federated Identity)是一种用户身份的验证方式,这种验证方式通过把用户身份的验证过程与被该用户访问的服务提供商(SP,Service Provider,如我们自己的站点)进行逻辑分离,在保证用户身份信息被隔离在用户所属系统的内部的同时,为受信任的服务提供商提供所需要的用户信息。
当服务提供商需要对用户的身份进行验证时,会将相关的验证过程转交给身份验证提供方(IdP,Identity Provider,如AvePoint域的 AD FS 验证服务),当用户经由身份验证提供方成功登录后,身份验证提供方会将用户的身份验证凭据和用户相关的信息返还给服务提供商,从而实现服务提供商对于用户身份的验证,以及对于用户信息获取。
常见的联合身份验证的实现有SAML、OAuth、OpenID等方式,本文主要介绍的是基于Claims和SAML 2.0的 AD FS 联合身份验证。在基于Claims的联合身份验证的过程中,当身份验证提供方完成对于用户身份的验证,返还用户的相关信息时,其数据信息实体被称之为令牌(Token),其中的相关信息字段被称为声明(Claims)。令牌保证了用户身份的真实性,并包含了实用信息,其结构如下图所示。

ADFS_Claims

1.2 基于Claims的身份验证简述

基于传统的开发方式,创建一个应用程序(即服务提供商)并保证多种身份验证机制可以协调工作并不是一件简单的工作。首先,我们需要决定对于特定的应用程序,哪一种身份验证技术最为合适。如果应用程序允许用户通过不同的方式进行访问,例如,允许同属一个组织下的域用户群体,或者跨越不同组织的多个域下的域用户群体,再或者同时允许这些域用户及传统的注册用户通过公网对应用程序进行访问,那么使用传统的单一的身份验证机制是完全不能满足这些需求的。在这些需求下,应用程序应该以直接经由用户所属的组织或系统处获取对应用户验证的结果。同时,也需要从一个AD目录服务或其它某处查询到用户相关的信息,并且保证这些信息可以在公网上,能够以统一的方式进行传递。
基于Claims的身份验证(Claims-based identity)为我们提供了这种统一的身份验证方式,让不同的服务提供商可以通过公网,获得所需要的保存在用户所属组织内部的关于用户的验证信息。其基本流程如下图所示。

ADFS_RP_IDP

首先,用户通过客户端(如浏览器),访问服务提供商(如图中①过程,相对于身份验证提供方也可以称其为信赖方RP)。信赖方向身份验证提供方提出验证请求(如图中②所示),身份验证提供方会要求用户输入登陆凭据(如用户名及验证码)。在通过其验证确认后,身份验证提供方会将验证成功的消息及该用户相关的数据信息以令牌的方式交还给信赖方(如图中③所示)。

以我的站点与某第三方联合身份验证系统的验证流程为例,其过程也可以用如下的时序图阐明。

ADFS_Flow

如前所述,我们涉及到两个新的概念,依赖方与安全令牌服务。
信赖方(RP,Relying Party)就相当于服务提供商,也就是由我们构建的依赖声明的应用程序(如我的网站)。信赖方有时也被称为“声明感知应用程序”或“基于声明的应用程序”。信赖方作为应用程序需要使用由安全令牌服务(STS)所颁发的令牌,并从令牌中提取声明,从而进行用户身份的验证和用户信息的获取。
安全令牌服务(STS,Security Token Service),信赖方所使用的令牌的创建者就是安全令牌服务。它作为一个Web服务存在。STS可以由我们自行构建,也可以应用已有的实现,AD联合身份验证服务(AD FS)就是一个STS的实现。
为了充分利用基于Claims的身份验证机制,我们将会使用由微软提供的用于支撑应用程序实现联合认证功能的可供依赖的基础架构。这些技术包括:AD联合身份验证服务(AD FS,Active Directory Federation Services),与Windows身份验证基础类库(WIF,Windows Identity Foundation)。

1.3 AD FS

Active Directory联合身份验证服务(AD FS,Active Directory Federation Services)是由微软自Windows Server 2003 R2起,在各个Server版本操作系统中提供的一个软件组件,其最新版本是集成在Windows Server 2012 R2的AD FS 3.0。
AD FS 使用基于Claims的访问控制验证模型来实现联合认证。它提供 Web 单一登录技术,这样只要在会话的有效期内,就可对一次性的对用户所访问的多个Web应用程序进行验证。
我们可以将 AD FS 理解为组织域内与公网之外用户桥梁。我们编写的应用程序作为Internet服务在公网部署,当程序需要对域内的用户进行验证时,就可以委托 AD FS 服务器进行验证。 AD FS 服务提供了一个 AD FS 联合服务器代理,这类似于一个只提供了登录界面的应用程序,我们将相关域用户的验证过程委托给该程序进行处理,该程序将提示用户输入验证凭据(这可以是在浏览器中弹出登录提示框或跳转到一个登录页面的形式),随后其将所获取的凭据传递给AD FS联合身份验证服务。 AD FS 作为AD的一部分有权限(其拥有AD域管理员的权限)使用AD DS的标准方式认证一个域内的用户,如果认证成功,AD FS 将会依据应用程序预先设定的信息需求,以Claims的形式将安全令牌信息返还给我们的应用程序。

1.4 AD FS 联合服务代理

如前所述,AD FS 联合服务代理是运行用户通过Internet进行 AD FS 的客户端身份验证凭据采集的接口,它会将获取到的凭据传递给联合身份验证服务器进行验证处理。

1.5 WIF

Windows身份验证基础类库(WIF,Windows Identity Foundation)是一组.NET Framework类,它为我们提供了实现基于声明标识的应用程序的基础框架。在具体的实现过程中,主要利用了其中的WSFederation Authentication Module(WS-FAM)HTTP模块。

1.6 概念总结

以上给出的相关概念层层递进,相似的概念在不同领域层次有着不同的称谓,为了方便理解,下面对这些概念的关系进行简单的总结。

AD FS中的称谓 SAML中的称谓 概念简述
Security Token 安全令牌 Assertion 声明 作为安全信息的封装,用于描述一个用户的信息,它在联合身份验证的访问请求期间被创建。
Claims Provider 声明提供方 Identity Provider (IdP) 身份验证提供方 为用户创建安全令牌的联合身份认证程序。
Relying Party 信赖方 Service Provider (SP) 服务提供商 收到联合身份验证服务信赖的请求并使用安全令牌的应用程序。
Claims 声明 Assertion attributes 属性声明 在安全令牌中的关于用户的数据信息。

下图对相关的领域结构进行了划分。

ADFS_Domain_Division

2 设计意图

2.1 登录模块概述

基于注册用户的账户管理方式并不能很好地适用于商业系统的使用场景。例如,当系统相关管理人员离开组织后,仍需其他的管理者对系统内相关联的账户信息进行进一步的维护。对于组织账户的信息应该交由组织的域服务器进行统一的管理及验证。因此,我们需要为系统添加独立的基于AD FS的联合身份验证。从而使系统既支持传统的注册用户,又支持域用户的使用。当用户登录时,系统会检查用户账户的后缀名,如果账户名称以someone@nap7.com形式输入,或者采用nap7someone的形式,则认定为域用户,系统将会自动跳转到AD FS联合身份验证服务器,进行用户身份的验证,如果验证通过,其使用方式与正常的注册用户完全一致。

2.2 联合身份验证的好处

联合身份验证的主要优势是:
(1)互联网现有的服务提供商不计其数,如果用户需要在每个服务提供商处都申请账户,那对于用户自身来讲无疑是一个巨大的负担,用户可能有几十个需要维护的身份验证信息,为了访问不同的服务提供商,用户就必须记住每一个ID和对应口令。如果用户在不同的服务提供商处使用相同的身份验证信息,那么一旦有一个站点发生安全信息的泄露,则可能直接导致用户在所有服务提供商处的信息收到严重威胁;
(2)如果用户以企业员工的身份访问服务提供商,则会涉及到诸如批量用户导入、身份授权、删除授权及用户信息等问题。例如,当一个属于组织O的用户A以组织员工身份在服务提供商S处注册了一个账户后,该员工A离开了之前的组织O,这时,这个用户A就不应该继续在服务S处代表该组织O。此时需要在服务提供商S处将该用户的访问权限清除,而这一操作本应由组织O来完成,对于未使用联合身份验证的系统来说,这是很难实现的;
(3)可以实现单点登录(SSO)。

2.3 扩展:如何支持多个AD域

如果我们的项目只是针对公司内部的成员使用,继承单个ADFS是足够的,但是,当项目作为云端服务,针对的用户群体可能是很多个企业级的用户。因此,就产生了对于多AD FS域独立验证的需求。基于已有的单AD FS的实现,本文稍后会提供一个支持多个AD域AD FS的联合身份验证服务的实现示例。
如果需要实现多个域的域用户登录,首先需要将相关域的AD FS配置信息保存在系统的数据库中,并提供相应方法,可以解析出用户所对应的域。这可以通过在用户信息表中保存用户对应的域配置,也可以通过用户的名称来获取对应配置。在获取相应的AD FS配置后,我们需要通过WIF所提供的API及相关事件,对当前用户的AD FS配置信息及完成验证后所需要的证书指纹信息进行设置。设置完成后,系统将会跳转到对应的AD FS登录页面,从而对用户的身份进行验证。验证成功后,跳转回系统,完成Security Token的验证。完成这些操作后,系统将生成用户的Cookie,完成登陆流程。

查看原文:http://nap7.com/me/adfs-introduce-and-develop/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ADFS 概念与基本开发介绍 (1) 的相关文章

  • 7.Xaml Image控件

    1 运行图片 2 运行源码 a xaml源码
  • 2016视觉目标跟踪总结

    最近学习视觉目标跟踪算法 主要了解了几个主流的跟踪算法 kcf stc dsst 算法原理网上很多 这里就不再赘述 只对跟踪效果做了测试记录 Kcf 全名Kernelized Correlation Filters 其中hog特征用的fho
  • 嵌入式(条件变量和线程池)

    条件变量 应用场景 生产者消费者问题 是线程同步的一种手段 必要性 为了实现等待某个资源 让线程休眠 提高运行效率 int pthread cond wait pthread cond t restrict cond pthread mut
  • 开头为0的md5值总结

    s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387a 0e8482404488305379
  • MATLAB曲线拟合灵敏度,用Matlab曲线拟合工具箱curve fitting曲线拟合,原来是这样的...

    在使用Matlab软件时 对于曲线拟合来说 有两种方式 其一是编写程序代码 其二是利用Curve fitting工具箱进行 本例通过一个多项式拟合的小试验 向您介绍利用curve fitting工具箱进行曲线拟合的一般步骤 工具 材料 Ma
  • 分块查找算法思路、示例和实现

    分块查找 索引表 22 44 74 数组 22 12 13 9 8 33 42 44 38 24 48 60 58 74 47 算法步骤 通过索引表线性查找确定在数组的哪一 块 通过数组里所在 块 的线性查找确定是否存在 在哪个位置 算法代
  • 2023西安交通大学软件工程915考研经验帖(初试+复试)

    目录 前言 一 初试准备 数学 英语 政治 专业课 总结 杂项 二 复试准备 1 笔试 数据库 操作系统 2 面试 总结 前言 本文仅记录我考研期间 2022 12初试 2023 3复试 的经验和感受 不具有普适性 请根据自身情况调整学习计
  • anaconda 删除环境_Anaconda:解决你装包的烦恼

    生物信息学的日常就是利用五花八门的工具和各种各样的数据打交道 很多时候需要在命令行安装软件或者包 我相信每一个生信人都碰到过安装软件或包时无法解决依赖的囧况 安装软件或者包 听起来是一件很简单的一件事 实际情况却不是如此 比如说编译时碰到系
  • android12适配机型,安卓12支持机型有哪些?安卓12系统为什么有的软件用不了?...

    安卓12系统终于发布了 虽说之前也体验了不少的测试版本了 这次正式版的发售还是很期待的 Android 12是Android历史上最大的设计变化 整体的界面也简洁了不少 不过也还存在不少的问题 比如指纹识别 人脸识别等 下面一起来看看安卓1
  • 网络通信TCP协议三次握手

    TCP是什么 TCP Transmission Control Protocol 传输控制协议 是一种面向连接 连接导向 的 可靠的 基于IP的传输层协议 TCP在IP报文的协议号是6 TCP是一个超级麻烦的协议 而它又是互联网的基础 也是
  • [Transformer]A Survey of Transformers-邱锡鹏

    复旦邱锡鹏组最新综述 A Survey of Transformers A Survey of Transformers Transformers已经在人工智能诸多领域 如NLP CV 声音处理等方面取得进展 也受到学术界和工业界的广泛关注
  • 第十四届蓝桥杯程序设计C++B组 (详细图解+保姆级注释)

    0 写在前面 本届CB组题目难度较往年整体提升了一些 考察知识点全面 题目质量很高 推荐备赛蓝桥杯或感兴趣的同学深入研究本套题 废话不多说 直接上干货 一 冶炼金属 签到题难度 考察数论分块知识or二分 有部分同学可能知道下取整的定义 但是
  • Mysql 时间戳转换为日期格式

    1 时间戳转日期 函数 FROM UNIXTIME select FROM UNIXTIME 1661997078 Y m d H i s 注意时间戳长度为 10 当时间戳长度大于10 要截取前十位 select substr 166199
  • python 再复习一下遍历目录下文件及子文件夹

    代表目前所在的目录 代表上一层目录 代表根目录 注意点的位置就是了 import os for image in os listdir os path join os getcwd 利润表 print image for root dirs
  • Vijava学习笔记之DataCenter(基础配置信息)

    vijava 代码 实体类 package com vmware pojo 数据中心 author zhb public class DataCenter extends Entity private String name 数据中心名称
  • ASP.NET Core 中间件详解及项目实战

    前言 在上篇文章主要介绍了DotNetCore项目状况 本篇文章是我们在开发自己的项目中实际使用的 比较贴合实际应用 算是对中间件的一个深入使用了 不是简单的Hello World 如果你觉得本篇文章对你有用的话 不妨点个 推荐 目录 中间
  • 使用ps命令查看进程的准确启动时间与启动后所消耗的时间

    使用ps命令查看nginx进程的准确启动时间与启动后到现在所消耗的时间 hadoop DSJ 4G 26 ps eo pid lstart etime cmd grep nginx 2204 Tue Nov 21 16 52 47 2017
  • Linux之iptables详解及tcpdump

    https www jianshu com p ed001ae61c58 原文有几处写的不明白的地方加以重整 可以参考这个人写的 感觉他明白的笔记透彻 https blog 51cto com 13677371 2094355 作者一共在内
  • K8S暴露服务的三种方式

    文章目录 暴露服务的三种方式 NodePort LoadBalane Ingress 内容参考 暴露服务的三种方式 NodePort 将服务的类型设置成NodePort 每个集群节点都会在节点上打 开 一 个端口 对于NodePort服务
  • mtb2_VizQL_Cleaning_Regx phone email_CRISP-DM_pdf table to text then to Excel

    Changing field attribution Let us look at the World Happiness Report We create the following worksheet by placing Start

随机推荐

  • 真题详解(哈希冲突)-软件设计(七十)

    真题详解 3FN 软件设计 六十九 https blog csdn net ke1ying article details 130548812 在以阶段划分的编译器 阶段的主要作用是分析构成程序的字符及由字符构造规则构成的符号是否复合程序语
  • 使用redis远程连接数据库

    使用redis远程连接数据库 1 首先下在redis 略 2 下载好后如图 3 输入远程数据库地址 error 错误信息提示的是 没有数据库权限 需要输入密码 4 输入密码后就可以进行操作了 5 因为是key value格式的 所以其实re
  • str计算机中代表什么,STR到底是待机还是休眠

    1 为什么需要待机 休眠 尽管电脑硬件运行速度越来越快 但操作系统的体积也在不断膨胀 使得电脑开 关机时 启动 关闭的程序越来越多 花费时间也越来越漫长 因此如何让电脑能够快速启动 一开机就进入Windows 就成为用户关心的问题 于是 随
  • (代码审计)zzcms前台SQL注入

    1 首先通过Seay源码审计工具发现存在admin ask phpSQL注入漏洞 2 根据提示定位到这段代码
  • Java-static关键词的引入

    Java static关键词的引入 栈 局部变量 堆 new出来的结构 对象 数组 方法区 类的加载信息 静态域 常量池 1 相关概念 静态的 公有的 不属于哪个对象 可以用来修饰 属性 方法 代码块 内部类 当static修饰属性时 按照
  • PMS及应用安装过程分析一

    本文阐释应用安装过程 对于开机过程应用包扫描过程不讲述 请参考网上其他文章 PMS类图 APP安装过程 1 PackageInstallerActivity创建 1 1 getPackageManager 1 2 processPackag
  • python如何检查一个对象是否是可迭代对象

    有的时候我们会记不住python里哪种数据类型是可以迭代的对象 这个时候我们可以使用collections里的Iterable来检查这个实例是否可以迭代 gt gt gt from collections import Iterable 载
  • 某东商品价格抓取

    今天做了一个京东商品价格的需求 整理一下 第一步 打开Chrome浏览器自带抓包工具 选择network选项卡 第二步 按下Ctrl F5 打开search 在里面输入价格 例如图中输入的是1318 00 然后回车就会出现包含价格的接口出现
  • 选频网络的原理

    请高手给我讲解下选频网络的原理 选频电路 2012 09 28 18 23 freechen3 分类 工程技术科学 浏览173次 提问者采纳 2012 09 30 00 07 选频网络是利用谐振原理实现 输入的信号含有各次频率分量 选频网络
  • js扩展jquery对象基元的开发与代码编写

    js扩展jquery对象基元的开发与代码编写 function window undefined var Core function var eventarr var OnPageLoad undefined 获取USER信息 var ge
  • OpenCV:旋转矩形(RotatedRect)

    RotatedRect类是OpenCV的基础类 用于创建旋转矩形 下面是它的构造函数 包含旋转中心点 尺寸大小和旋转角度 构造函数1 RotatedRect const Point2f center const Size2f size fl
  • ​2 万字系统总结,带你实现 Linux 命令自由?

    前言 Linux 的学习对于一个程序员的重要性是不言而喻的 前端开发相比后端开发 接触 Linux 机会相对较少 因此往往容易忽视它 但是学好它却是程序员必备修养之一 如果本文对你有所帮助 请点个 吧 作者使用的是阿里云服务器 ECS 最便
  • redis主从同步,总是显示master_link_status:down的解决方法

    前几天 在修改一台从节点的redis的监听端口后 重启了下redis 发现master link status 很长时间一直都是down状态 查看了redis日志 发现日志里出现很多的 I O error trying to sync wi
  • 解决Java连接MySQL后出现的时区错误问题

    好不容易连接好数据库后 第二天打开运行 发现底下一串报红 The server time zone value is unrecognized or represents more than one time zone 线程 main ja
  • Java中变量的作用域【Java基础】

    最近在看 Thinking in Java 想把Java基础再巩固一下 在博客上遇到的以前没注意到的知识点或者较难的知识点记录下来 与大家分享 Java中的基本类型变量的作用域为 int x 1 变量x的作用域只在大括号内 System o
  • QT文件读取路径

    最近在弄中兴的一个程序大赛 用QT读取XML文件的编程 在编程中发现QT文件读取路径与VS有不同之处 我们提供给QFile的文件路径无非就是绝对路径和相对路径 绝对路径是绝对没问题的 不过相对路径就得小心了 谈到相对路径 需要注意区分进程所
  • MES系统给制造型企业带来了哪些效益

    MES系统要怎么给制造型企业带来效益 在这场剧烈的市场竞争中 制造企业不只要在产品质量和创新上具有竞争优势 而且产品的价格在很大程度上决定了企业的市场竞争力 MES系统如何去打破生产暗箱 建造通明化工厂 提高生产效率 如今 中国工厂存在两大
  • 逃逸闭包和非逃逸闭包

    在使用swift开发 使用闭包作为参数传递到函数中 但是总是默认提示加上 escaping 逃逸闭包 是指闭包在函数结束时 闭包就会随着函数的结束而被释放 非逃逸闭包 是指闭包在函数结束时 逃逸函数 不会随函数的结束而被释放 在该闭包执行后
  • ubuntu 下实现 docker+ovs+quagga搭建网络---bgp

    注 本机上现有quagga镜像 ovs虚拟交换机 2 9 1 docker 18 09 7 实现bgp网络搭建 1 sudo ovs vsctl add br br1 增加一个ovs网桥br1 2 sudo docker images 查看
  • ADFS 概念与基本开发介绍 (1)

    如您转载本文 必须标明本文作者及出处 如有任何疑问请与我联系 me nap7 com ADFS 相关开发技术的中文资料相对匮乏 之前再弄这个东西的时候搞的比较辛苦 因此总结此文档 以解后人之忧 本文会首先介绍与联合身份验证有关的概念及相关的