做单点登录肯定离不开用户认证(Authentication),而一般用户认证往往会有用户授权(Authorization)的需求,这边记录一些用户认证和用户授权中所经常接触到的协议和标准,甚至一些产品,这里会尽量记录最新版本的信息,资料会逐渐完善. (20150916)
先普及个姿势,现有大多数产品或网站基本都把用户信息记录在数据库里并且用于登录认证,然而,这并不是一个标准的做法。 因为每个产品的用户表的结构都是不一样的。至于怎么才是个标准,见下文.
最后加个Single Sign On的Implementation List:
https://en.wikipedia.org/wiki/List_of_single_sign-on_implementations
大多数都是自己的理解,如果有偏差请轻喷。
PS: 结尾要发布了看到一个提示,差点吓尿。。ITeye还是贴心小棉袄啊
"您的文章当中包含了敏感关键词'XXX',属于有关部门规定的有害信息,为了保护您和ITeye网站的安全,我们建议您不要发表这篇文章,有关部门一旦认为你的文章是有害信息,会要求我们提供你的IP地址"
先普及个姿势,现有大多数产品或网站基本都把用户信息记录在数据库里并且用于登录认证,然而,这并不是一个标准的做法。 因为每个产品的用户表的结构都是不一样的。至于怎么才是个标准,见下文.
- SAML2.0 Standard
- 定义了登录的流程和不同系统之间交互的传输内容格式。若干年没见到更新,标准有若干版本:"Committee Specification"和"Oasis Standard",似乎是个委员会经过讨论,最终成为一个标准。
老官网地址(Legacy Only): http://saml.xml.org/
新Wiki地址: https://wiki.oasis-open.org/security/FrontPage
文档地址: http://docs.oasis-open.org/security/saml/
Shibboleth( http://shibboleth.net/)是SAML的一个现有最完整的开源产品实现,包括若干个子产品。
SAML本身并不关心用户存在哪里,用户怎么认证也是可配置的,username/password只是最常见的用户验证方式(用户一般存在LDAP),另外还有证书登录也很常见,比如插个含有证书的U盾直接就能登录这种。
- OAuth2.0
- 1.0a已经很少使用了,现在大多网站都在使用OAuth2.0。
OAuth主要是为了做授权,一般都是拥有用户数量比较大的网站支持,如Google,facebook,QQ,新浪之类,做好之后给小的网站或者合作网站使用。例如大家经常在非QQ的网页上看到的"使用QQ登录"。用户在第三方网站点击这个按钮,用QQ登陆完,QQ会询问用户, 你想让第三方网站使用你的哪些资料?这就是一个授权的过程,不过一般基本信息都是给第三方网站开放的。
官网地址: http://oauth.net/2/
RFC文档地址: http://tools.ietf.org/html/rfc6749
- OpenID Connect
- 和之前版本的名字一定要区分,之前有OpenId1.0和2.0,最新的版本叫 OpenId Connect.
OpenId Connect其实是基于"OAuth2.0"的,很2B的是他的文档写的自己不像是个功能性补丁,反而感觉把OAuth的一大部分包进来了一样,让我理解了好一会儿,当然我也不太确定自己理解的正确不正确=。=:
OAuth2.0的提供网站最终给第三方网站了一个AccessToken,让第三方网站通过这个Token获取OAuth2.0提供网站的资源,目的是授权。 OpenID Connect在这个基础之上又定义了个ID Token,除了在这个ID Token中包含一些身份认证相关的"claim"之外,还定义了如何通过AccessToken获取一些标准格式的用户信息,可以看到OpenId Connect主要是想提供用户身份信息。
官网地址: http://openid.net/connect/
搬梯子看OpenId Connect的视频介绍: http://www.youtube.com/watch?feature=player_embedded&v=Kb56GzQ2pSk
- Kerberos
- 还没细看,貌似主要是为了支持Desktop APP的SSO,待补充
- LDAP
- 专业解释请自行百度百科。。 用以下方式理解简单点:
首先,LDAP主要是用来存储用户和组织结构的
其次,LDAP是以树的方式来存储的,这点和数据库不同,数据库是二维表。
再次,LDAP只是个抽象,比如可以对应"数据库",那么数据库具体有"MySQL","SQL Server",对应的,LDAP也有具体的产品,如"Open LDAP",“Active Directory”,"Sun Java System Directory Server"等。可以通过代码连接数据库,那么当然也可以通过代码连接LDAP Server.
- JAAS
- 待补充
- Site Minder
- 一个支持SSO的解决方案/产品,在HTTP头中加入用户身份信息,一般可以以过滤器的方式处理HTTP请求头,如果发现包含用户信息,就直接验证或者存储,不用再让用户登录了。
- WS Trust
- 待补充
最后加个Single Sign On的Implementation List:
https://en.wikipedia.org/wiki/List_of_single_sign-on_implementations
大多数都是自己的理解,如果有偏差请轻喷。
PS: 结尾要发布了看到一个提示,差点吓尿。。ITeye还是贴心小棉袄啊
"您的文章当中包含了敏感关键词'XXX',属于有关部门规定的有害信息,为了保护您和ITeye网站的安全,我们建议您不要发表这篇文章,有关部门一旦认为你的文章是有害信息,会要求我们提供你的IP地址"