ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大白话讲解OAuth2.0的客户端模式Client Credentials

2021-12-16 19:02:05  阅读:275  来源: 互联网

标签:refreshToken accessToken refresh client token Client Credentials xxxxxxxxxx OAut


Oauth2.0的客户端模式

 

1.由Authorization Server提供给各业务系统一个clientID和clientSecret;

2.通过clientID和clientSecret获取accessToken;

POST /token HTTP/1.1
Host: authorization-server.com
 
grant_type=client_credentials
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx

3. 如果验证通过,正常返回accessToken如下

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
 
{
  "access_token":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3",
  "token_type":"bearer",
  "expires_in":3600,
  "refresh_token":"IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk",
  "scope":"create"
}

  如果验证不通过,返回的example如下

HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
 
{
  "error": "invalid_request",
  "error_description": "Request was missing parameter."
}

4.关于token的选择包括以下几种

  • 短期的accessToken和长期的refreshToken

这个是官方推荐做法,具有更大的安全性和灵活性;

这种场景下,可以让accessToken有效期从几个小时到几周,refreshToken是长期有效要求比acessToken有效期长;

当accessToken失效后,可以通过refresshToken获取新的accessToken;

这种方式多用在不打算提供数据库处理accessToken而是通过本地加解密方式从而提高系统响应时间、有效降低泄露accessToken的风险、考虑到refreshToken逻辑实现比较让人讨厌,所以需要服务方提供sdk封装refresh的操作。

  •  短期的accessToken且不提供refreshToken

这种选择下accessToken有效性可以维持从当前session至几周,自由选择;

但是规范是要求到期后,需要用户重新登录系统,之后重新通过认证获取accessToken,让用户参与到accessToken有效期的维护中。

  • 永不过期的accessToken

这种是最简单也最容易让人接受的方式,但是必须做到能随时让某个accessToken失效;

如果token泄露了不会有大的风险、可以让调用方更容易的实现认证、有数据同步的需求优先考虑

 

5. 刷新accessToken

如果采取【短期的accessToken和长期的refreshToken】,那么就必须提供刷新的接口,刷新接口必须校验必输项,验证refreshtoken有效性,验证clientid和clientsecret匹配性,之后提供新的accessToken

POST /oauth/token HTTP/1.1
Host: authorization-server.com
 
grant_type=refresh_token
&refresh_token=xxxxxxxxxxx
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx

 

标签:refreshToken,accessToken,refresh,client,token,Client,Credentials,xxxxxxxxxx,OAut
来源: https://www.cnblogs.com/share2perfect/p/15699552.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有