spring整合Oauth2

OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。 OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限。

举个例子:

在某论坛上,希望用QQ登录。点了QQ登录,那论坛就引导跳转到QQ的授权页面了,同时需要对论坛进行认证。
在这个页面里,我要登录一下QQ了。前面已经认证过论坛了,现在登录就是认证我了。
登录成功后,QQ显示出授权的内容,让我确认,我点了确认。
确认之后,事实上论坛当初转到QQ授权页面的时候,除了提供自己的身份,还有一个redirectUrl。当我点了授权后,QQ把合同给了这个Url,等于就是给了论坛了。
论坛拿到了认证信息,再把自己的登录信息给QQ再验证一下,QQ就把我的资料给了论坛了。

标准的认证过程

OAuth认证和授权的过程如下

1、用户访问第三方网站网站,想对用户存放在服务商的某些资源进行操作。
2、第三方网站向服务商请求一个临时令牌。
3、服务商验证第三方网站的身份后,授予一个临时令牌。
4、第三方网站获得临时令牌后,将用户导向至服务商的授权页面请求用户授权,然后这个过程中将临时令牌和第三方网站的返回地址发送给服务商。
5、用户在服务商的授权页面上输入自己的用户名和密码,授权第三方网站访问所相应的资源。
6、授权成功后,服务商将用户导向第三方网站的返回地址。
7、第三方网站根据临时令牌从服务商那里获取访问令牌。
8、服务商根据令牌和用户的授权情况授予第三方网站访问令牌。
9、第三方网站使用获取到的访问令牌访问存放在服务商的对应的用户资源。

一些概念

1)Third-party application:第三方应用程序(client)。
2)HTTP service:HTTP服务提供商。
3)Resource Owner:资源所有者-"用户"(user)。
4)User Agent:用户代理-浏览器。
5)Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
6)Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。

运行流程

(A)用户打开客户端,客户端要求用户给予授权。
(B)用户同意给予客户端授权。
(C)客户端使用上一步获得的授权(一般是Code),向认证服务器申请令牌TOKEN。
(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(E)客户端使用令牌,向资源服务器申请获取资源(用户信息等)。
(F)资源服务器确认令牌无误,同意向客户端开放资源。

客户端获取授权的五种模式

客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。

OAuth 2.0定义了五种授权方式:

关于session和token

    session是空间换时间,而token是时间换空间。session占用空间,但是可以管理过期时间,token管理部了过期时间,但是不占用空间.
    sessionId失效问题和token内包含。
    session基于cookie,app请求并没有cookie 。
    token更加安全(每次请求都需要带上)。

授权码模式(authorization code)
功能最完整、流程最严密的授权模式。
简化模式(implicit)
密码模式(resource owner password credentials)
客户端模式(client credentials)
扩展模式(Extension)