授权认证相关学习资料

最近看关于单点登陆的文章,发现了CAS、Oauth2、OpenId Connect等新的名词,发现单点登录看起来简单,实际上隐藏如此多的知识。之前在工作中看到的单点登陆,能用,但是有很多的问题,对比一下CAS协议,确实有很多不足。另外工作中会遇到某些接口资源被刷,原因很多是因为提供给第三方的对接接口的问题,其实可以引入授权协议,还可以搭建网关来防止。


授权认证相关学习资料

SSO

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指,只需要单一的注销动作,就可以结束对于多个系统的访问权限。

CAS

是实现SSO的其中一种方式。
参考资料:

Oauth2

开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
PS:Oauth2中的认证服务器是必须使用https的,这个是一个前提。
参考资料:

授权与认证的区别

Oauth2是授权协议,不包括认证功能。认证是告诉你当前用户是谁,以及一些用户的属性。Oauth2并不包含此功能。见到最多的说使用Oauth2提供第三方登陆功能,详细说是使用Oauth2协议,让客户端可以调用某些受保护的资源,而其中一个资源是返回当前登录人的信息。所以完成第三方登陆并不只使用了Oauth2,还是用了一些额外的功能实现了认证
Oauth2为什么不能用于认证,简单来说,拥有了access_token只能代表有人授权,并不代表是用户登陆了,甚至连有没有用户都不确定(例如使用客户端模式)。详情看[认证授权] 3.基于OAuth2的认证(译) - blackheart - 博客园

授权码模式中code的作用

授权码模式中,在用户确认授权之后,认证服务器会通过回调的形式,将code返回给客户端,而不是直接返回access_token,因为不能信任客户端(例如客户端没有使用https),直接返回access_token可能会被盗取。因此只返回一个code,让客户端的服务器使用该code向认证服务器获取access_token(认证服务器是需要https的,这个是前提)。
为什么认证服务器要返回code,由客户端再次发起请求获取token,而不是认证服务器回调客户端的接口通知其access_token,之前看到这个问题没有来得及回答。因为这样对认证服务器要求太高。举个例子,某客户端A接入qq登陆,客户端A的服务端处理请求耗时2,qq服务器处理请求耗时1,如果采用以上方式,整个流程qq服务器需要耗时3(因为qq服务器要等待客户端回调接口的响应),然后有这么多服务使用qq作为第三方登陆。。。

OpenId

OpenID是一个去中心化的网上身份认证系统。对于支持OpenID的网站,用户不需要记住像用户名和密码这样的传统验证标记。取而代之的是,他们只需要预先在一个作为OpenID身份提供者(identity provider, IdP)的网站上注册。OpenID是去中心化的,任何网站都可以使用OpenID来作为用户登录的一种方式,任何网站也都可以作为OpenID身份提供者。
参考资料:

OpenId Connect(OIDC)

OIDC是OpenID Connect的简称,OIDC=(Identity, Authentication) + OAuth 2.0。它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。
PS:OpenId和OpenId Connect是完全不一样的东西。
参考资料: