前言
本文基于go-oauth2/oauth2,参考go-oauth2/oauth2/example、go-oauth2/gin-server、llaoj/oauth2,结合beego框架实现OAuth 2.0授权码方式。

介绍
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某网站上存储的资源(如邮箱、手机、头像等),而无需将用户名和密码提供给第三方应用。
OAuth2.0规定了四种授权方式,授权码、隐藏式、密码式、客户端凭证。本文主要讲解授权码方式的实现。可参考OAuth 2.0的四种方式理解。
(一)在认证和授权的过程中涉及到:
1、服务提供方,用户使用服务提供方来存储受保护的资源,如邮箱、手机、头像。
2、用户,存放在服务提供方的受保护的资源的拥有者。
3、客户端,要访问服务提供方资源的第三方应用。在认证过程之前,客户端要向服务提供者申请客户端标识。
4、授权服务,提供授权。
(二)使用OAuth 2.0进行认证和授权的过程如下所示:

实现
结合第二部分介绍,认证授权过程涉及服务提供方、用户、客户端、授权服务,这里
(一)主要涉及到接口:
1)获取code
code?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE
client_id:应用唯一标识,客户端可以请求服务提供方的资源,需要在服务提供方进行注册,生成client_id,client_secret;
redirect_uri:重定向地址;
response_type:值为code;
scope:应用授权作用域,拥有多个作用域用英文逗号(,)分隔;
state:用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,如果state不匹配,需终止oauth流程。

2)获取access_token
/access_token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=CODE&grant_type=authorization_code&redirect_uri=REDIRECT_URI
code:授权服务返回的code;
grant_type:值为authorization_code

3)刷新access_token
/refresh_token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

4)验证access_token
/auth?client_id=CLIENT_ID&grant_type=auth_token&access_token=ACCESS_TOKEN

5)获取用户资源
/userinfo?access_token=ACCESS_TOKEN

6)登录
/login
post方式,参数username,password

(二)关键数据表
1)客户端需要在服务提供方注册信息,
关键字段:name、redirect_uri、scope、client_id、client_secret、icon,分别表示应用名称、重定向地址、授权域、客户端id、客户端密钥、应用图标
2)服务提供方用户资源表,
比如字段:user_id、username、pwd、nickname、avatar,分别表示用户id、用户名、密码、昵称、头像

(三)代码结构

完整代码下载

注意:源码查看时,oauth2>oauth2Init.go需要调整,因为在引用的go-oauth2/redis中有涉及事务的操作,为了保障事务的正确进行(尤其使用的是redis集群),需做如下调整:

效果展示

基于go-oauth2/oauth2实现OAuth 2.0 授权码方式相关推荐

  1. java 32位授权码_Java实现OAuth2.0授权码方式

    Java实现OAuth2.0授权码方式 前面介绍了OAuth2.0和授权方式,可以参考以下文章: 今天就用Java来验证OAuth2.0授权方式的授权码式,我们Spring Cloud的OAuth来实 ...

  2. OAUTH 2.0授权码授予

    OAuth 2.0提供了许多安全性流程(或授权类型),以允许一个应用程序访问另一个应用程序中的用户数据. 在此博客中,我们将介绍OAuth 2.0授权:授权代码授权. 首先,有许多定义: 客户端 :用 ...

  3. OAuth 2.0 授权码请求

    关于OAuth 2.0,请参见下面这两篇文章(墙裂推荐): <OAuth 2.0> <Spring Security OAuth 2.0> 纸上得来终觉浅,绝知此事要躬行.理论 ...

  4. php授权验证系统 c,OAuth 2.0 授权码认证

    参考文章 组成成分 用户 应用1 应用2 流程 用户在应用1浏览.使用的过程中,涉及到要使用应用2功能的时候,就产生了 oauth 认证! A. 登录授权 应用1携带如下查询字符串: response ...

  5. 理解auth2.0授权码方式

    OAuth 2.0 规定了四种获得令牌的流 授权码(authorization-code) 隐藏式(implicit) 密码式(password): 客户端凭证(client credentials) ...

  6. 基于 IdentityServer3 实现 OAuth 2.0 授权服务【密码模式(Resource Owner Password Credentials)】...

    密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码.客户端使用这些信息,向"服务商提供商"索要授权 ...

  7. OAuth2.0授权码模式学习

    OAuth2.0授权码模式学习 四种授权方式 1,授权码模式 2,简化模式 3,密码模式 4,客户端模式 授权码模式 四种授权模式中最完成,最严密的授权. (1)用户访问客户端,后者将前者导入认证服务 ...

  8. oauth2.0授权码_OAUTH 2.0授权码授予

    oauth2.0授权码 OAuth 2.0提供了许多安全流程(或授权类型),以允许一个应用程序访问另一个应用程序中的用户数据. 在此博客中,我们将介绍OAuth 2.0授权:授权代码授权. 首先,有许 ...

  9. oauth2.0授权码模式详解

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

最新文章

  1. 在复杂业务中落地 DDD 的实践方法论
  2. 继承的综合运用《Point类派生出Circle类而且进行各种操作》
  3. PHP大法——实验吧
  4. Top K算法问题的实现
  5. sock使用UDP协议进行广播发送数据
  6. 【Unity】第8章 GUI开发
  7. Python代码打包成exe文件
  8. ORACLE会话以及SQL执行信息查询
  9. Java实现MongoDB的日期(Date)分组功能
  10. c语言酒店管理系统,基于C#的酒店管理系统(V3.1)最新版
  11. 【2022年Spring全家桶】Spring5.x 框架详解
  12. OV5640摄像头驱动开发讲解
  13. jquery获取选中和未选中的checkbox复选框
  14. 阿里云ACP考试模拟题一
  15. WebRTC实现简单音视频通话功能
  16. 技术文档写作风格指南
  17. 莆系如何投放快手广告?
  18. jeesite代码生成器的使用(初学者)
  19. R语言train函数调参(caret包)
  20. Knockout.js的简单使用

热门文章

  1. MAC下TexLive+texmaker使用经验
  2. 杭电ACM1408——盐水的故事
  3. 错误00932_ORA-00932: inconsistent datatypes: expected - got -
  4. Nginx反向代理之location
  5. Linux简历面试题目
  6. 详解PyTorch中的contiguous
  7. 让Mac状态栏上的时间/日期显示日历,农历 - 轻松查看日历 - 菜单栏TinyCal
  8. 关于Atlas OS 卡VC导致reticuulating splines...的解决办法
  9. SQL 数据库完整性
  10. [合规性检查方法-simplicity和soundness]简单度和合理性介绍