用Go简单实现Github授权登录并获取github用户信息
用Go简单实现Github授权登录并获取github用户信息
参考: 没错,用三方 Github 做授权登录就是这么简单!(OAuth2.0实战)-腾讯云开发者社区-腾讯云 (tencent.com)
首先我们需要了解一下什么是Oauth2.0
可以看阮一峰老师的这个文章::理解OAuth2.0
一.授权流程
二.注册应用
要想得到一个网站的OAuth
授权,必须要到它的网站进行身份注册,拿到应用的身份识别码 ClientID
和 ClientSecret
。
注册 传送门 https://github.com/settings/applications/new
,有几个必填项。
-
Application name
:我们的应用名; -
Homepage URL
:应用主页链接; -
Authorization callback URL
:这个是github
回调我们项目的地址,用来获取授权码和令牌。https://docs.github.com/zh/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps
提交后会看到就可以看到客户端ClientID
和客户端密匙ClientSecret
,到这我们的准备工作就完事了。
三.授权开发
获取授权码
我们请求https://github.com/login/oauth/authorize?client_id=yourclient_id& redirect_uri=your_redirect_url/authorize
请求后会提示让我们授权,同意授权后会重定向到authorize/redirect
,并携带授权码code
;如果之前已经同意过,会跳过这一步直接回调。
然后我就回跳转到redirect_url,能拿到这个code
http://localhost:8080/callback?code=ac3d9c25eb39752b34c2
|
|
既然我们知道了原理,就可以这么写,这样我们前端访问对应的api http://localhost:8080/login
就可以直接重定向到http://localhost:8080/callback?code=ac3d9c25eb39752b34c2
这个页面了
获取令牌
想获取access_token
,我们需要向这个url发送post请求,携带client_id
,client_secret
,code
参数
access_token
会作为请求响应返回,结果是个串字符。
根据上面的请求,我们就能写出对应的go代码
|
|
可以拿到下面的打印:
|
|
以上access_token已脱敏
我们再代码中对body进行解析,并将其转换为 map[string][]string
类型的键值对,然后单独取出access_token字段
有了令牌以后开始获取用户信息,在 API
中要带上access_token
。
获取用户信息
有了令牌以后开始获取用户信息,在 API
中要带上access_token
。
|
|
只需要再请求头里面带上Authorization: Bearer token
,设置一个User-Agent
就可以了
下面附上完整代码:
|
|
可以拿到下面的响应:
|
|
我们使用json格式化工具格式化一下看看返回了什么信息
|
|
四.封装到应用程序
|
|
我们写注册登录逻辑就能这么写了
|
|