OAuth & OpenID & SAML 工作流程梳理对比
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OAuth & OpenID & SAML 工作流程梳理对比相关的知识,希望对你有一定的参考价值。
参考技术A我们经常会提到到SSO,OAuth,OpenID,SAML,一时间会让人摸不清他们之间的关系和区别,最近简单粗浅的研究了一下,分享出来。还有很多问题没来得及搞清楚,希望与大家一起讨论学习!
OAuth 是由 Google 和 Twitter 合作开发的相对较新的认证授权标准(相比SAML),到现在被广泛使用的是OAuth2.0 版本。
我们在使用一些网站和手机应用的时候,往往需要填写各种信息和资料注册用户,这让很多人望而却步。利用第三方进行认证授权会让用户体验大大提升,并且也能降低系统的开发难度,减少开发成本。如今有很多互联网产品,比如,微信,QQ,新浪等拥有大量的用户,它们顺理成章的成为了第三方认证服务提供者。
下面的这种界面你一定不陌生:
这里使用 QQ 登录 CSDN,并且 CSDN 被 授权 获取用户的QQ昵称,头像和性别。
等等,在近一步讲解之前,我们先要知道OAuth的几个基本概念:
第一个模式花了较多的口水讲解,后面的你可别指望了了哈!!!
隐式模式是个什么鬼,它跟授权码模式的区别是什么?先看请求:
注意哦,这里的 response_type 是 token ,表示要请求一个 access_token 。直接找认证服务器要 token,并且也没有带上授权码模式请求中的 client_secret ,你牛!
第三步的认证服务器重定向到 https://CLIENT_URL/callback#token=ACCESS_TOKEN , 注意这里面有个 # 号哦!你回头去看看上一种模式里面跳转的URL长什么样??
第四步浏览器跟着重定向URL回到客户端(Client),但却并没有把 Token 直接带过去,token 被留在了浏览器里!
第五步,客户端(Client) 使用 javascript 从浏览器里提取出 token
第六步,浏览器将 token 正式交给客户端(Client)
对了,补上一张这个模式的时序图:
请求如下:
客户端模式倒是简单,不需要用户提供账号密码,只需要提供客户端的账号密码(就是 CSDN 在 QQ 那边注册时得到的作为唯一表示的 client_id 和 client_secret 。 但如果是这样的话客户端咋知道使用的第三方(QQ) 的那个用户呢 ?有待继续研究吧~ 如果我还记得起来这个问题!
OpenID 是基于 OAuth 协议的 ,在工作流程上跟OAuth很相近。OpenID的版本有OpenID 1.0,OpenID 2.0,OpenID connection
概念:
OpenID 有三种模式 (我们只讲第一种,后面的请自行查阅资料):
在讲下一步之前,先告诉你两点:
获取 id_token 请求如下:
这里你会发现请求中没有 client_id 和 client_secret ,他们是通过 Header 中的 Authorization 字段传递的。请求返回:
SAML 是比较早的协议,有1.0,2.0版本,采用 XML 格式传递请求和返回数据。
基本概念:
以下是SAML的基础工作流程图:
断言的格式大概如下:
Response 语句大概如下:
SAML本身含有很多不同变种的流程,这里演示的是最基本的一个,方便理解!
这三个概念本身包含的内容还远不止于此,篇(因)幅(为)有(懒)限(惰),就写这么一些基本的东西。如果你有兴趣近一步加深理解,可以参考以下这些链接:
也欢迎你留言参与讨论,有很多问题我也还没了解透彻,希望能有人传道授业解惑!
以上是关于OAuth & OpenID & SAML 工作流程梳理对比的主要内容,如果未能解决你的问题,请参考以下文章