oauth2.0 授权码模式简单理解

什么是 oauth协议 ?

百度百科上有解释:允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。

简单的来讲就是一个令牌,这个令牌可以有一定的权限,在不知道用户密码的情况下也可以进行部分的功功能操作。用一个例子帮助理解:一个甲方公司,公司里面使用一卡通,这张卡可以门禁,食堂,等等,公司招了外包进来,外包只能开通门禁就行,其他的权限是没有的。这时候公司就不会给一张正式员工的卡,而是外包的卡,正编员工卡就是用户的账号密码,这个外包卡就相当于是一个令牌,并且可能公司会给你的外包卡设置一个有效期,等有效期快到的时候有需要申请延期。这个就相当于是oauth协议模式。用户不会给你用户名和密码,那样相当于放开了所有的权限,而会给你提供一个令牌,在有效期类可以访问特定的功能服务

oauth协议有四种模式;

  • 1、授权码模式
  • 2、隐藏式
  • 3、密码式
  • 4、客户端凭证

其中授权码方式是最常用的流程,安全性也最高,今天我们就来着重讲一下授权码模式。

授权码模式: 指的是第三方应用先申请一个授权码,然后再用该码获取令牌,授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。

授权码模式主要分为几个步骤
以甲方公司员工卡系统(SelfResearch.com)和外包公司员工卡系统(outsource.com)为例,下面是授权码模式的流程
oauth2.0 授权码模式简单理解_第1张图片

  • 请求授权码

首先,甲方公司给外包员工方提供一个授权链接,外包员工点击连接,申请授权码,连接参数如下所示

https://SelfResearch.com/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read

response_type参数表示要求返回授权码(code),
client_id参数让 甲方 知道是谁在请求,
redirect_uri参数是 甲方系统 接受或拒绝请求后的跳转网址,
scope参数表示要求的授权范围(这里是只读)。

  • 返回授权码

用户跳转到这个之后,甲方公司会先要求用户登录,然后请求授权,如果同意就跳转到redirect_uri这个参数的地址,并返回授权码

https://SelfResearch.com/callback?code=AUTHORIZATION_CODE

code就是表示授权码

  • 请求令牌

外包员工拿着授权码去请求令牌

https://SelfResearch.com/oauth/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&
grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=CALLBACK_URL

client_id参数和client_secret参数用来让 甲方公司 确认 外包员工 的身份(client_secret参数是保密的,因此只能在后端发请求)。
grant_type参数的值是AUTHORIZATION_CODE,表示采用的授权方式是授权码。
code参数是上一步拿到的授权码。
redirect_uri参数是令牌颁发后的回调网址。

  • 返回令牌

外包员工访问redirect_uri会得到一串json数据:

{
    "access_token": "67c4051b-36c8-11ec-af33-00163e0808bf",
    "token_type": "bearer",
    "refresh_token": "71975ccc-36c8-11ec-af33-cfd2826915e5",
    "expires_in": 3249,
    "scope": "read"
}

access_token就是令牌了,用户需要访问其他接口就需要带上这个token去访问了
refresh_token这个是刷新令牌,如果需要使用新的token,就需要通过这个刷新令牌来获取最新的access_token。

oauth的授权码模式就讲到这,有什么不对的地方,欢迎大家指出

你可能感兴趣的:(oauth,java)