基于go-oauth2/oauth2实现OAuth 2.0 授权码方式
前言
本文基于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 授权码方式相关推荐
- java 32位授权码_Java实现OAuth2.0授权码方式
Java实现OAuth2.0授权码方式 前面介绍了OAuth2.0和授权方式,可以参考以下文章: 今天就用Java来验证OAuth2.0授权方式的授权码式,我们Spring Cloud的OAuth来实 ...
- OAUTH 2.0授权码授予
OAuth 2.0提供了许多安全性流程(或授权类型),以允许一个应用程序访问另一个应用程序中的用户数据. 在此博客中,我们将介绍OAuth 2.0授权:授权代码授权. 首先,有许多定义: 客户端 :用 ...
- OAuth 2.0 授权码请求
关于OAuth 2.0,请参见下面这两篇文章(墙裂推荐): <OAuth 2.0> <Spring Security OAuth 2.0> 纸上得来终觉浅,绝知此事要躬行.理论 ...
- php授权验证系统 c,OAuth 2.0 授权码认证
参考文章 组成成分 用户 应用1 应用2 流程 用户在应用1浏览.使用的过程中,涉及到要使用应用2功能的时候,就产生了 oauth 认证! A. 登录授权 应用1携带如下查询字符串: response ...
- 理解auth2.0授权码方式
OAuth 2.0 规定了四种获得令牌的流 授权码(authorization-code) 隐藏式(implicit) 密码式(password): 客户端凭证(client credentials) ...
- 基于 IdentityServer3 实现 OAuth 2.0 授权服务【密码模式(Resource Owner Password Credentials)】...
密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码.客户端使用这些信息,向"服务商提供商"索要授权 ...
- OAuth2.0授权码模式学习
OAuth2.0授权码模式学习 四种授权方式 1,授权码模式 2,简化模式 3,密码模式 4,客户端模式 授权码模式 四种授权模式中最完成,最严密的授权. (1)用户访问客户端,后者将前者导入认证服务 ...
- oauth2.0授权码_OAUTH 2.0授权码授予
oauth2.0授权码 OAuth 2.0提供了许多安全流程(或授权类型),以允许一个应用程序访问另一个应用程序中的用户数据. 在此博客中,我们将介绍OAuth 2.0授权:授权代码授权. 首先,有许 ...
- oauth2.0授权码模式详解
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
最新文章
- 在复杂业务中落地 DDD 的实践方法论
- 继承的综合运用《Point类派生出Circle类而且进行各种操作》
- PHP大法——实验吧
- Top K算法问题的实现
- sock使用UDP协议进行广播发送数据
- 【Unity】第8章 GUI开发
- Python代码打包成exe文件
- ORACLE会话以及SQL执行信息查询
- Java实现MongoDB的日期(Date)分组功能
- c语言酒店管理系统,基于C#的酒店管理系统(V3.1)最新版
- 【2022年Spring全家桶】Spring5.x 框架详解
- OV5640摄像头驱动开发讲解
- jquery获取选中和未选中的checkbox复选框
- 阿里云ACP考试模拟题一
- WebRTC实现简单音视频通话功能
- 技术文档写作风格指南
- 莆系如何投放快手广告?
- jeesite代码生成器的使用(初学者)
- R语言train函数调参(caret包)
- Knockout.js的简单使用
热门文章
- MAC下TexLive+texmaker使用经验
- 杭电ACM1408——盐水的故事
- 错误00932_ORA-00932: inconsistent datatypes: expected - got -
- Nginx反向代理之location
- Linux简历面试题目
- 详解PyTorch中的contiguous
- 让Mac状态栏上的时间/日期显示日历,农历 - 轻松查看日历 - 菜单栏TinyCal
- 关于Atlas OS 卡VC导致reticuulating splines...的解决办法
- SQL 数据库完整性
- [合规性检查方法-simplicity和soundness]简单度和合理性介绍