From the book 《Modern Authentication with Azure Active Directory for Web Applications》

SAML

The Security Assertion Markup Language, SAML for short, appeared on the scene mostly for handling this very problem. Its origin dates back to the early 2000s as a concerted effort of various industry players that wanted to establish an interoperable solution to the SSO problem. SAML 2.0 is the most widely adopted version, with some systems (especially those in academia) still on 1.1. Although SAML touches on how to secure web services and lots of other scenarios, its most widely adopted use case is web browser–based SSO, and that’s what I’m going to focus on.

Although both Azure Active Directory and Active Directory Federation Service (ADFS) (from version 2 onward) support SAML, the .NET Framework does not offer any classes out of the box for building applications that understand the protocol. Developing with the .NET Framework is the main focus of this book, so even if I provided a detailed description of how SAML works, it would not be very actionable for you. However, the importance of SAML as a framing reference for identity problems cannot be overstated. Moreover, a good chunk of the jargon you’ll encounter comes straight from SAML. Learning the basics is a good investment for any beginner in this space.

In a nutshell, SAML sidesteps the shortcomings of domain-bound cookies by, you guessed it, adding an extra abstraction layer. Instead of relying on browser automatisms, SAML introduces a sequence of application-level messages that enable an application to send authentication requests and obtain tokens that can be sent across domains. Once those tokens successfully cross domain boundaries, they can be validated by the target app and used to initialize a session with the new domain. I’ll unpack the scenario as soon as I define more terminology to work with.

SAML follows precisely the blueprint introduced in the claims-based identity section. Let’s draw some correspondences between the abstract entities defined in the general meta protocol and concrete artifacts from SAML.

Roles

I am sure you noticed that the sample scenario I introduced earlier contained one entity playing the role of the IdP (that was airline.example.com and its profile store). The good news is that in SAML, IdPs are called . . . IdPs.

In the terminology of claims-based identity, the cars.example.com.uk application is called an RP. In SAML, it is known as a service provider, or SP. Another important role is the subject, the entity that is meant to be authenticated. In the vast majority of cases, that’s simply the user. SAML also describes other roles, but the ones I’ve enumerated suffice for the purposes of this book.

Artifacts

SAML is guilty of having introduced not one but two widely successful technologies: the protocol it defines and the specific token format that the protocol’s messages exchange. I say “guilty” facetiously: people commonly refer to both technologies with the same term, “SAML,” which has caused confusion for the past decade or so. When somebody states, “My app supports SAML,” you always have to ask for clarification: “The protocol or the token format?”

In SAML parlance, tokens are called assertions. They follow the exact token semantic described in the preceding section: they are a vessel for the IdP’s assertions about the user (excuse me), the subject. And they are signed.

The SAML acronym, together with the epoch in which it was conceived, probably already gave away that SAML assertions are based on XML. In fact, the entire specification defines everything in terms of XML. That leads to a very expressive, powerful format that can represent pretty much anything. However, all that expressivity comes with various drawbacks. The main one is that XML is very verbose, which leads to big tokens. Furthermore, in XML, the same document can be expressed in multiple equivalent representations, and that flexibility becomes a problem when you need to perform signatures, where two elements listed in a different order can break a signature verification. Those are the main reasons that you won’t encounter SAML assertions in modern protocols later in the book, apart from cases in which they are used to bridge existing solutions to new ones.

It is tempting for me to use the SAML token structure to start entering into the mechanics of how claims are defined, tokens are scoped, and signatures are applied, but, as I said, SAML is not at the core of the modern protocols that are the main focus of this book. Those explanations will have to wait until a bit later.

Another important artifact defined by SAML is the format of its metadata documents. You already encountered the idea of IdP metadata in the section on claims-based identity. SAML goes well beyond that: it defines an XML-based format that can be used for describing endpoints, identifiers, and keys for IdPs, SPs, and many other entities.

Messages

SAML defines lots of different messages that support various sign-in flows, from the one triggered by an unauthenticated request to an SP (similar to what’s described in the claims-identity section), to one in which the IdP itself initiates a sign-on with a given SP. One interesting fact is that besides signing its assertions, SAML often mandates that messages themselves need to be signed as well.

The other interesting category of SAML messages, Single Logout, focuses on providing a mechanism to propagate a sign-out operation to all the applications participating in an SSO session. SAML defines many other messages for various other operations, which I won’t mention here.

Status

SAML has had an impressive ride from its first versions in the early 2000s. It’s still going strong in many of today’s SSO deployments in enterprises, government, and education. SAML is widely supported in SSO products, developer libraries (across platforms and languages), and cloud services. For many of those products, the SAML functionality is the centerpiece of their offering. As I mentioned, Active Directory itself (both ADFS from version 2 onward and Azure AD) supports it. On the software vendor side, many applications in active development today use SAML, including software as a service (SaaS) apps. The protocol is alive and well.

That said, if you are starting to develop a new solution, SAML might not be your best choice. Although really well suited for solving the cross-SSO domain problem and bringing lots of good features to the table, SAML does not offer the flexibility for addressing the challenges of the modern topologies I will introduce later in this chapter. Furthermore, its own richness translates into expensive requirements in term of cryptography and bandwidth that are not proportionate to the actual needs of modern applications. I won’t go so far as to say that SAML is dead, as was fashionable to say in identity circles a couple of years ago, but it is certainly no longer the recipient of innovation. I believe it will be around for a long time still, but mostly as a bridge to existing systems.

SAML的更多相关文章

  1. SAML 2.0 setup steps, 效果图

    Steps of setting up SAML SSO. 效果图 # Registry a Identity Provider services in:(Might need purchase) I ...

  2. SAML : A SAML stack

    http://nzpcmad.blogspot.co.nz/2013/06/saml-saml-stack.html You have an application – .NET, JAVA what ...

  3. Gitlab 7.12 发布 SAML支持及其他更多功能

    官方文章:https://about.gitlab.com/2015/06/22/gitlab-7-12-released/ CSDN翻译文章:http://geek.csdn.net/news/de ...

  4. 单点登录系统构建之一——基础知识(Kerberous/SAML)

    http://web.mit.edu/kerberos/ Kerberos Kerberous是一个网络身份验证协议,它被设计为客户端/服务器提供基于密钥的强加密机制.该协议最初由MIT实现并被广泛商 ...

  5. SAML - SSO(转)

    http://baike.baidu.com/view/758527.htm?fr=aladdin SAML即安全断言标记语言,英文全称是Security Assertion Markup Langu ...

  6. 基于SAML的单点登录介绍

    http://blog.csdn.net/csethcrm/article/details/20694993 一.背景知识: SAML即安全断言标记语言,英文全称是Security Assertion ...

  7. SAML 2.0初始

    一.背景知识: SAML即安全断言标记语言,英文全称是Security Assertion Markup Language.它是一个基于XML的标准,用于在不同的安全域(security domain ...

  8. Confluence 6 数据中心的 SAML 单点登录最佳实践和故障排除

    最佳实践 SAML 授权仅仅在有限的时间进行校验.你需要确定运行你的应用的计算机时间与 IdP 的时间是同步的. 如果你应用中的用户和用户组是通过用户目录进行配置的,你通常希望用户来源目录和你的 Id ...

  9. 基于 Confluence 6 数据中心在你的 Atlassian 应用中配置 SAML 授权

    希望在 Confluence 中配置SAML: Go to  > 基本配置(General Configuration) > SAMl 授权(SAML Authentication). 选 ...

  10. 基于 Confluence 6 数据中心的 SAML 单点登录设置你的身份提供者

    如果你希望 Confluence 提供 SSO,将需要将 Confluence 添加到你的 IdP 中.一些后续的步骤将会与你的 IdP 有关,但是你通常需要: 在你的 IdP 中定义一个 'appl ...

随机推荐

  1. url文件的格式

    [DEFAULT]BASEURL= [InternetShortcut]URL=WorkingDirectory=ShowCommand=IconIndex=IconFile=Modified=Hot ...

  2. C++ 第九课 标准c数学函数

    abs() 求绝对值 acos() 求反余弦 asin() 求反正弦 atan() 求反正切 atan2() 求反正切,按符号判定象限 ceil() 求不小于某值的最小整数 (求上界) cos() 求 ...

  3. android studio 开发经常使用快捷键使用分享

    windows开发经常使用快捷键 实体类生成get set 等方法 快捷生成变量快捷 windows开发经常使用快捷键 实体类生成get set 等方法 快捷键 alt + insert 快捷生成变量 ...

  4. 安装MySQL-python报错:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory或者 build\lib.win-amd64-2.7\_mysql.pyd : fatal error LNK1120: 56 unresolved externa

    解决办法1: 直接下载MySQL-python-1.2.5.win-amd64/32-py2.7.exe,点击安装 此处要注意自己安装的Python和MySQL版本是64位还是32位,否则在进行安装M ...

  5. top命令参数

    参数说明 d 指定每两次屏幕信息刷新之间的时间间隔.当然用户可以使用s交互命令来改变之. p 通过指定监控进程ID来仅仅监控某个进程的状态. q该选项将使top没有任何延迟的进行刷新.如果调用程序有超 ...

  6. auto_ptr,unique_ptr,shared_ptr,weak_ptr

    http://mojijs.com/2016/08/218129/index.html http://www.cnblogs.com/lanxuezaipiao/p/4132096.html

  7. nano在CentOS上的安装和使用

    安装: yum -y install nano 打开新建:nano 路径+文件名 查看用:cat path/filename如果改文件存在,上面的命令将打开这个文件:如果文件不存在则将会创建一个新文件 ...

  8. ODI---->Variables

    一.变量简介 变量存储的是一个单一的值,既可以是数字,也可以是字符或者日期.不能为数组. ODI的变量分为两种,全局变量和项目变量. 顾名思义,项目变量定义的变量只可以在本项目中使用,其它项目无法调用 ...

  9. 一起talk C栗子吧(第八十五回:C语言实例--使用信号进行进程间通信二)

    各位看官们,大家好,上一回中咱们说的是使用信号进行进程间通信的样例,这一回咱们接着上一回的内容,继续说该样例.闲话休提.言归正转. 让我们一起talk C栗子吧. 我们在上一回中举了使用信号进行进程间 ...

  10. 播布客视频PIT专用播放器MBOO2015

    播布客视频,还是挺不错... 很多视频都是pit后缀的,需要用MBOO2015才可以打开... 00.MB2015软件 01.视频样例 02.download 链接: https://pan.baid ...