上次给大家安利的一款开源的第三方授权登陆的工具库,JustAuth【安利】这应该是史上最全的整合第三方登录的开源库,到目前为止码云已获355个star,Github上也已经有40多个start了。
该项目在上线第一天就被码云列为推荐项目,且到目前为止,三天内都位列日排行榜和周排行榜第一名。
也感谢各个朋友对该项目的热爱!这个项目取名 JustAuth
,如您所见,就像它的名字一样,这仅仅是一个第三方授权登录的工具类库,仅此而已。
上一篇文章已经总结了如何通过JustAuth集成Gitee授权登录,本文会总结一下如何使用Github实现授权登录。
这个开源库的接入流程就如上篇文章[链接]所说,总共分三步,并且所有平台目前的接入流程都是按照这三步操作。
申请注册第三方平台的开发者账号
创建第三方平台的应用,获取配置信息(id, secret, callbackUrl)
使用该工具实现授权登陆
注:开发者文档:https://developer.github.com/
https://github.com/。如果已有则忽略该步骤,直接进入第二步。
进入通过右上角进入个人设置页:https://github.com/settings/profile
然后进入第三方应用页面:https://github.com/settings/developers
在应用管理页面,选择 OAuthApp
,然后点击右上方的 NewOAuthApp
按钮进入新建应用页面
Applicationname
一般填写自己的网站名称即可Applicationdescription
一般填写自己的应用描述即可HomepageURL
填写自己的网站首页地址Authorizationcallback URL
重点,该地址为用户授权后需要跳转到的自己网站的地址,默认携带一个 code
参数
以上信息输入完成后,点击下方绿色的 Registerapplaction
按钮创建应用。创建完成后,点击进入应用详情页,可以看到应用的密钥等信息
copy以下三个信息: ClientID
、 ClientSecret
和 Authorizationcallback URL
。
JustAuth
实现授权登陆创建授权request
AuthRequest authRequest = new AuthGithubRequest(AuthConfig.builder()
.clientId("Client ID")
.clientSecret("Client Secret")
.redirectUri("Authorization callback URL")
.build());
生成授权地址
authRequest.authorize()
生成授权地址后,可以直接redirect到授权页面。
授权完成后,进行登录
// code为用户授权后回调回本地系统时携带的参数,不可重复利用
AuthResponse response = authRequest.login(code);
response数据结构如下:
{
"code": 0,
"msg": null,
"data": {
"username": "zhangyd-c",
"avatar": "https://avatars3.githubusercontent.com/u/12689082?v=4",
"blog": "https://www.zhyd.me",
"nickname": "yadong.zhang",
"company": "innodev",
"location": "Beijing",
"email": "yadong.zhang0415@gmail.com",
"remark": "心之所向,无所不能",
"gender": null,
"source": "GITHUB",
"accessToken": "f00969002de1a7b4bf411c39d917dab657c9ee5fd"
}
}
到此为止,Github授权登录功能就算完成了!
最后,附上上面的小例子的整合版代码:
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.request.AuthGithubRequest;
import me.zhyd.oauth.request.AuthRequest;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@RestController
@RequestMapping("/oauth")
public class RestAuthController {
@RequestMapping("/render/github")
public void renderAuth(HttpServletResponse response) throws IOException {
AuthRequest authRequest = getAuthRequest();
response.sendRedirect(authRequest.authorize());
}
@RequestMapping("/callback/github")
public Object login(String code) {
AuthRequest authRequest = getAuthRequest();
return authRequest.login(code);
}
private AuthRequest getAuthRequest() {
return new AuthGithubRequest(AuthConfig.builder()
.clientId("Client ID")
.clientSecret("Client Secret")
.redirectUri("Authorization callback URL")
.build());
}
}
更多api,请参考原项目文档,项目地址
github: https://github.com/zhangyd-c/JustAuth
gitee: https://gitee.com/yadong.zhang/JustAuth
blog-hunter,一款简单好用并且支持多个平台的博客爬取工具