基于go-oauth2/oauth2实现OAuth 2.0 授权码方式

前言
本文基于go-oauth2/oauth2,参考go-oauth2/oauth2/examplego-oauth2/gin-serverllaoj/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集群),需做如下调整:

效果展示

 

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值