真实比喻

在我们获得技术之前,让我们用完全非技术性的东西来解决这个问题。作为工程师,我们非常注重将事情分解为组件和流程。这有助于我们了解事情,以便我们可以排除故障或构建复杂的系统。当你去机场登机时,你的登录协议,身份验证协议和令牌类型是什么?这三个组件将成为整个博客的焦点。我将如何定义它们:

  • 什么是登录协议(Sign-in protocol)?去了其中一个值机亭,然后打印我的登机牌,然后通过TSA线,然后去登机口,最后登上飞机。我希望我能以这种方式与机场互动并按顺序执行这些动作,否则,我将无法登机。
  • 什么是身份验证协议(Authentication protocol)?虽然我的登机牌是其中的一部分,但我必须提供身份证或护照来证明我是谁。
  • 什么是令牌类型(Token Type)?我的登机牌是我登机的令牌。

现在,当我们谈论WS-Fed或SAML时,总是问自己同样的问题:什么是登录协议,什么是身份验证协议,什么是令牌类型。无论您是否理解这些概念,询问这些问题都会产生影响。

1 WS-FED

WS-Fed是一种登录协议,用简单的英语表示当你试图获得访问权限的应用程序将你重定向到ADFS服务器时,它必须以特定的方式(WS-Fed)处理。

A 登录协议

典型的请求

https://sts.cloudready.ms/adfs/ls/?wa=wsignin1.0&wtrealm=https%3a%2f%2fclaimsweb.cloudready.ms&wctx=rm%3d0%26id%3dpassive%26ru%3d%252f&wct=2014-10-21T22%3a15%3a42Z

  • Wa = signin1.0:这告诉ADFS服务器为用户调用登录。
  • Wtrealm:这告诉ADFS我想要的应用程序是什么。这必须与ADFS中列出的其中一个信赖方信任的标识符相匹配。
  • Wctx:这是应用程序希望在用户进行身份验证后发送回的一些会话数据。
  • wct:这是我尝试访问应用程序的确切时间。

B 身份认证协议

略。。。

C 令牌类型

最后,在输入我的凭据后,ADFS让我发送回原始应用程序的令牌类型是什么:当使用WS-Fed登录协议时,ADFS将始终向您的浏览器发出SAML 1.1令牌然后,您将自动POST回应用程序

2 SAML

SAML是登录协议和令牌类型。关于登录协议,SAML和WS-Fed实现了同样的目的,但处理方式却截然不同。

A 登录协议

示例

https://sts.cloudready.ms/adfs/ls/?SAMLRequest=jZFRT4MwFIX%2FCun7KC3OjWaQ4PbgkqlkoA%2B%2BmAKdNCkt9hZ1%2F14GmkwfFl%2Fv%0APfc7p6cr4K3qWNq7Ru%2FFWy%2FAeZ%2Bt0sDGRYx6q5nhIIFp3gpgrmJ5erdj1A9Y%0AZ40zlVHISwGEddLotdHQt8Lmwr7LSjzudzFqnOuAYQyNLP1Kmb62gtdHvwWc%0AD6PSKOEaH8DgE5ni7CEvkLcZokjNT9AzhIM%2FBF4fACvAyNtuYvRSRSIiZXlN%0AwrlY0CriSxKGhNLDFeXhYjkfZAC92GpwXLsY0YCEM0JnQVQESxaEjCyekZd9%0AP%2BxG6lrq18stlJMI2G1RZLMp%2FJOwMAYfBChZnbpko7E9a%2Fcylv9UipJ%2FFbjC%0AZy6TZcfuB%2Bx2kxklq6OXKmU%2B1sOpEzEiCCfTye%2FfT74A%0A&RelayState=cookie%3A29002348&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1&Signature=M0xoWQfcN3Yp94T2HiqIdJzEkxYqGc6hhopqi8xOI%2B2BtPSLufFDdQIF7z6Xjm6XdLq1MH9Av5xz2QWYs84ZYhlG3fHtZCjjaoI2wZqplRszHla%2BjtZoW20NGDepDsCRT0AKNkhe%2B4Yj3LshrM6EX5O3obx2Mypy8EcsoURkTF3kf1dwKqsGA3ka7ehbRmUQGJUXD0u4iFBog7YgkL4Q9FYMTanZeRo2X4%2FkAeNxT8ormKWJfYnAzg0F4Ku60zDd5N7jYu4XeyOsXDthEFI5H4WYucAprREl2hgSUI21J782kKzrslalIaJ5BKPIO50NPCIb5Sf6Zw4maLpZrFEfrw%3D%3

让我们分解这些参数:

  • SAMLRequest:这实际上是一个Base64编码的XML文档。您实际上可以将此值减去SAMLRequest =粘贴到此处以对其进行解码并以纯文本格式查看@https://idp.ssocircle.com/sso/toolbox/samlDecode.jsp
  • RelayState:在我针对ADFS进行身份验证后,应用程序希望将其发送回的会话数据。
  • SigAlg:使用哪种签名算法对请求进行签名。
  • 签名:上述请求的数字签名。

B 身份认证协议

略。。

C 令牌类型

ADFS将始终为使用SAML登录协议配置的应用程序发出SAML 2.0令牌。

3 OAuth

虽然有一些关于OAuth是登录协议或身份验证协议的争论,虽然它确实在不断发展,但在ADFS 2012 R2领域,OAuth是另一种登录协议。

A 登录协议

示例

https://sts.cloudready.ms/adfs/oauth2/authorize?response_type=code&client_id=3fb2a37f-4ced-409c-937c-dddd776f4dfd&redirect_uri=https://www.davetestapp.com&resource=https://www.davetestapp.com

让我们分解这些参数:

  • response_type:  告诉我想要执行OAuth并获得授权代码的ADFS服务器。
  • client_id:我想要访问的应用程序的ID。
  • 资源:我正在尝试访问的应用程序的URL / URI。
  • redirect_uri:告诉ADFS将授权代码发回的人

B 身份认证协议

C 令牌类型

原文链接:https://blogs.technet.microsoft.com/askpfeplat/2014/11/02/adfs-deep-dive-comparing-ws-fed-saml-and-oauth/

比较SSO协议: WS-Fed, SAML, and OAuth的更多相关文章

  1. SAML和OAuth2这两种SSO协议的区别

    目录 简介 SAML SAML的缺点 OAuth2 OAuth2的缺点 两者的对比 CAS简介 简介 SSO是单点登录的简称,常用的SSO的协议有两种,分别是SAML和OAuth2.本文将会介绍两种协 ...

  2. SSO & Single Sign On

    SSO & Single Sign On 单点登录 https://en.wikipedia.org/wiki/Single_sign-on https://cloud.google.com/ ...

  3. SAML - SSO(转)

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

  4. 在wildfly中使用SAML协议连接keycloak

    目录 简介 OpenID Connect和SAML SAML的工作流程 在keycloak中使用SAML 准备wildfy和应用程序 简介 我们知道SSO的两个常用的协议分别是SAML和OpenID ...

  5. OAuth 2.0 / RCF6749 协议解读

    OAuth是第三方应用授权的开放标准,目前版本是2.0版,以下将要介绍的内容和概念主要来源于该版本.恐篇幅太长,OAuth 的诞生背景就不在这里赘述了,可参考 RFC 6749 . 四种角色定义: R ...

  6. OpenID Connect:OAuth 2.0协议之上的简单身份层

    OpenID Connect是什么?OpenID Connect(目前版本是1.0)是OAuth 2.0协议(可参考本人此篇:OAuth 2.0 / RCF6749 协议解读)之上的简单身份层,用 A ...

  7. 转 OAuth 2.0授权协议详解

    http://www.jb51.net/article/54948.htm 作者:阮一峰 字体:[增加 减小] 类型:转载 时间:2014-09-10我要评论 这篇文章主要介绍了OAuth 2.0授权 ...

  8. Java项目接入sso单点登录

    最近在落地cat(java开发的一款开源监控系统)接入公司的内部项目,其中有项需求是接入公司的sso单点登录系统.研究了公司之前java项目接入sso系统,大部分是采用spring框架,然后依赖spr ...

  9. SSO单点登录和CAS

    一.单点登录流程 =====客户端====== 1.拦截客户端的请求判断是否有局部的session 2.1如果有局部的session,放行请求. 2.2如果没有局部session 2.2.1请求中有携 ...

随机推荐

  1. 使用JSP/Servalet技术开发新闻发布系统------JSP数据交互一

    什么是内置对象 JSP内置对象是 Web 容器创建的一组对象,不用通过手动new就可以使用 JSP中的九大内存对象  request 请求对象  response 响应对象  out   输出对象  ...

  2. Java中static用来计数

    搓搓的代码 import java.util.ArrayList; import java.util.Iterator; class Student{ private static int num; ...

  3. php利用webuploader实现超大文件分片上传、断点续传

    PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...

  4. /etc/inittab

    # inittab is no longer used when using systemd. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON ...

  5. luogu 3919

    主席树 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath& ...

  6. loj3120 「CTS2019 | CTSC2019」珍珠

    link .... 感觉自己太颓废了....还是来更题解吧...[话说写博客会不会涨 rp 啊 qaq ? 题意: 有 n 个物品,每个都有一个 [1,D] 中随机的颜色,相同颜色的两个物品可以配对. ...

  7. 2019暑期金华集训 Day1 数据结构

    自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...

  8. 阿里云服务器linux系统上 安装node环境

    今天将阿里云服务器重windows系统重置成了linux系统, 点击上面的实例名称,进入到 点击  更换系统盘   选择linux 的centos版本(操作前需要  停止实例) 弄好后,启动实例 下面 ...

  9. P1065 作业调度方案——小模怡情,大模伤身

    P1065 作业调度方案 一个有点费手的“小”%%拟: 题都差点没读明白……: 每个机器所能完成的工序是不一样的: 每个物品完成工序的机器是指定的: 按照题面说的按时间轴推下去就行了: 没有时间上界有 ...

  10. pimpleFoam求解器 vs simpleFoam求解器 vs pisoFoam求解器 vs icoFoam

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/68072-pimplefoam-vs-simplefoam ...