oauth2 go 实现解析

draft: false date: 2018-10-10 11:37:33 cover: /images/avatar.jpeg tags: - go preview:


资料收集

Oauth 2.0 协议

https://tools.ietf.org/html/rfc6749

现有项目

https://github.com/RichardKnop/go-oauth2-server

中文说明

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

点击 oauth 按钮

http://localhost:8080/web/authorize?client_id=test_client_1&redirect_uri=https%3A%2F%2Fwww.example.com&response_type=code&state=somestate&scope=read_write

实际上是访问了这个地址

oauth 用户的注册登录

这个没什么好说的

也是用了 cookie 来存

入口分析

google oauth 的跳转链接是这样的

https://accounts.google.com/o/oauth2/auth?client_id=535143305360-oji3tqslih7kt0bfhjt8hvitukhgfjo9.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8081%2Fapi%2FGoogle&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&state=state

阮的粗糙的说明是这样的k

  • response_type:表示授权类型,必选项,此处的值固定为"code”
  • client_id:表示客户端的ID,必选项
  • redirect_uri:表示重定向URI,可选项
  • scope:表示申请的权限范围,可选项
  • state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。

协议的参数说明: https://tools.ietf.org/html/rfc6749#appendix-A

client_id

https://tools.ietf.org/html/rfc6749#section-2.2

应用的 id, 用这个判断当前是哪个应用在申请资源

redirect_uri

https://tools.ietf.org/html/rfc6749#section-3.1.2

申请后的重定向 uri

response_type

https://tools.ietf.org/html/rfc6749#section-3.1.1

可以是 code 或者 token

scope

https://tools.ietf.org/html/rfc6749#section-3.3

state