Spring Security构建Rest服务-1000-使用SpringSocial开发第三方登录之大白话OAuth协议

OAuth协议简介

  OAuth协议要解决的问题

     OAuth协议中的各种角色

  OAuth协议运行流程

OAuth协议,在网上也看了一些资料,意思就是给你颁发一个临时的通行证,你拿着这个通行证可以访问我的某些资源,不包括密码等关键信息,最常见的就是第三方登录,如qq登录,微信登录,第三方应用可以访问我们的用户名头像等一些基本信息。

在这里举个例子来说明

比如说你有一个应用,微信助手,可以美化你微信上自拍的照片,这对双方都是有利的,可以快速扩展第三方应用的用户量,这个应用如果想要获取到你微信上的照片,就需要微信授权。

常见的就是微信给你账户和密码,你就能获取到微信的自拍照了,但是这是有问题的:

1,应用可以访问用户在微信上的所有的数据

2,用户只有修改密码,才能收回授权

3,密码泄露的可能性大大提高

OAuth协议就是为了解决这样的问题而生的:

1,用户名/密码-->令牌,令牌的权限是有限的,它只能访问你的微信自拍数据

2,令牌是有有效期的

OAuth协议主要角色

Provider:服务提供商,提供令牌。相当于例子中的微信。

Resources Owner:资源所有者,就是用户,用户拥有自拍照资源。

Client:第三方应用,例子中的微信助手。

Authentication Server:认证服务器,认证用户的身份,并产生令牌。

Resource Server:资源服务器,作用1,存放用户资源,就是例子中的自拍数据,;2,验证令牌。 (认证服务器和资源服务器在物理上可以是一台服务器)

OAuth协议运行流程:

1,用户访问第三方应用

2,第三方应用请求用户授权

3,用户同意授权,第三方应用就会访问服务提供商的认证服务器(如访问微信的服务器,告诉他用户已同意访问自拍数据),问他要一个令牌

4,认证服务器看是不是用户真的同意了,如果是,会发一个令牌给第三方应用

5, 第三方应用就拿着令牌去访问资源服务器去申请获取资源

6,资源服务器会验证获取资源请求的令牌,验证通过,会把申请的资源开发给用户

第二步同意授权是关键,OAuth定义了四种授权模式

授权码模式(authentication code):授权码模式是功能最完整,流程最严密的授权模式。互联网所有服务提供商qq微信淘宝百度微博...都是这种

密码模式(resource ownowner password credentials):app用

简化模式(implicit):用得少

客户端模式(client credcredentials):用得少

授权码模式:

1,用户访问客户端

2,如果第三方应用客户端需要用户授权,会将用户导向认证服务器,用户同意授权这个动作会在认证服务器上完成

3,如果用户同意授权,认证服务器会将第三方应用重新导回到第三方应用一个指定的URL,并携带一个授权码(还不是令牌token)

4,第三方应用拿到授权码再去认证服务器申请令牌(在第三方应用的服务端完成,对用户不可见)

5,认证服务器会核对授权码是不是第三步发回去的,如果是,给客户端发放令牌token

因为这个过程中会产生授权码,其他的授权模式没有,所以叫授权码模式。

主要特点:用户同意授权的动作在认证服务器上完成的,认证服务器可以肯定用户授权的真假。

而其他的密码模式、客户端模式同意授权是在第三方应用上完成的,完成以后第三方应用向认证服务器申请令牌的时候带着一些信息说用户同意我了 ,存在的问题就是认证服务器不知道用户是否真的同意授权了,可能是第三方应用伪造的。

授权码模式要求第三方应用必须有一个服务器,有些网站只有静态页,就可以使用简化模式。

原文地址:https://www.cnblogs.com/lihaoyang/p/8510226.html