Oauth2.0原理及应用

概念:

    Oauth2.0是    Oauth的下一个版本,为Web应用、桌面应用、手机应用和起居室设备提供专门的认证、授权服务。

认证流程:(客户想访问和操作服务提供方的资源)

    (用户----->客户端----->服务提供方)

1、用户通过账号密码登录客户端向服务提供方请求了一个临时令牌。

2、服务提供方验证用户的身份后,授予客户端一个临时令牌。

3、客户端拿到临时令牌后,会引导用户到服务提供方的授权页面进行用户授权。在此过程中将临时令牌和客户端的回调链接发送给服务提供方。

4、用户在服务提供方的授权页面输入用户名、密码进行授权,允许客户端访问服务提供方的资源。

5、授权成功后,服务提供方会引导用户跳转回客户端网页。

6、客户端会根据临时令牌从服务提供方那里获取访问令牌。

7、服务提供方会根据临时令牌和用户的授权情况授予用户访问资源的访问令牌。

8、客户端使用访问令牌去访问需要访问的服务提供方资源。

官方给出的流程图:

(客户端、资源拥有者、授权服务、资源服务)

Oauth的授权方式:

1、简化模式:(在重定向的redirect_url的Hash中传递token;Auth客户端运行在浏览器中,入JS,Flash)

在redirect_uri 的Hash传递token; Auth客户端运行在浏览器中,如JS,Flash
作者:
链接:https://www.imooc.com/article/10931
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作
在redirect_uri 的Hash传递token; Auth客户端运行在浏览器中,如JS,Flash
作者:
链接:https://www.imooc.com/article/10931
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作
在redirect_uri 的Hash传递token; Auth客户端运行在浏览器中,如JS,Flash
作者:
链接:https://www.imooc.com/article/10931
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,redirect_url的Hash传递token,Auth的客户端运行在浏览器中,比如JS,Flash);

2、密码模式:将用户的账号密码传过去,直接获取token;

3、客户端模式:用户想客户端注册,客户端以自己的名义向服务端获取资源的访问权限。

认证实例:(本人项目实例过于复杂,不便作为实例,故借用 K_Biao博客:基于OAUTH2的统一认证的实例解析

场景:应用服务器访问端口:8000;认证服务器端口:8090;

用户登录的时候,需要在登录url上带上以下url。

http://localhost:8090/oauth/authorize?response_type=code&scope=read write&client_id=test&redirect_uri=http://localhost:8000/login&state=09876999

作者:
链接:https://www.imooc.com/article/10931
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作
http://localhost:8090/oauth/authorize?response_type=code&scope=read write&client_id=test&redirect_uri=http://localhost:8000/login&state=09876999

作者:
链接:https://www.imooc.com/article/10931
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作
http://localhost:8090/oauth/authorize?response_type=code&scope=readwrite&client_id=test &redirect_uri=http://localhost:8000/login&state=09876999

http://localhost:8090/oauth/authorize?response_type=code&scope=read write&client_id=test&redirect_uri=http://localhost:8000/login&state=09876999

我们注意到几个重要的参数:


作者:
链接:https://www.imooc.com/article/10931
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作

response_type:表示授权类型,就是上面讲的那四种类型,这里用的是code方式。
client_id:表示客户端的ID,代表哪个应用请求验证
redirect_uri:表示重定向URI,验证以后的回调地址,一般用来接收返回的code,以及做下一步处理。
scope:表示申请的权限范围,

state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。作为安全校验。

验证服务器接受请求的控制器代码:

首先拿到这个请求以后根据请求的参数将其封装成一个OAuthAuthxRequest,基本就是把请求过来的参数,方法绑定便于使用。这是由oltu提供的OAuthRequest的进一步封装。
然后判断这个请求的授权的类型是否是code,也就是判断下请求参数的response_type是否为code,可以看到目前制作了两种类型的授权。

然后根据对应的授权类型,构造对应的方法处理器。下面是handle的实现接口:


如果以上步骤都通过的话,认证服务器会转向这个会调地址,带上发放的Code码,类似如下:

http://localhost:8000/login?code=bca654ab6133ab3cbc55bb751da93b1c&state=09876999

与之前请求类似只是多了一个code字段,去验证客户端的合法性。

验证服务器会在收到code以后去查找是否有支持这种code的处理器,如果有则发放token。

初始化支持的handler

验证通过后应用服务器会接受到包含token的一个json数据:

这个token是有一定的有效期的,在服务端会缓存这个token以便下一次查询,应用客户端也应该保留这个token,访问受限资源时候需要带上这个token去验证身份。

资源服务器上使用shiro做安全验证,配置OAuth2对应的realms即可:




















猜你喜欢

转载自blog.csdn.net/z695284766/article/details/80414413