diff --git a/README.en-US.md b/README.en-US.md index e35ffb6b61205e93e40396bf3a2487b19b129f9a..255e828f9fff1691de08a37a96c745c8707e03b3 100644 --- a/README.en-US.md +++ b/README.en-US.md @@ -1,12 +1,12 @@

- +

Login, so easy.

- + @@ -15,9 +15,9 @@ - + - + @@ -71,7 +71,7 @@ -

查看更多
+
查看更多
------------------------------------------------------------------------------- @@ -81,7 +81,7 @@ `JustAuth`, as you see, It is just a Java library of third-party authorized login, It's smaller and easier to use. JustAuth is the best third-party login tool written in JAVA. Source Code:[gitee](https://gitee.com/yadong.zhang/JustAuth) | [github](https://github.com/zhangyd-c/JustAuth) -Docs:[Reference Doc](https://docs.justauth.whnb.wang) +Docs:[Reference Doc](https://justauth.wiki) ## Features @@ -97,7 +97,7 @@ These artifacts are available from Maven Central: me.zhyd.oauth JustAuth - 1.15.5 + 1.15.6 ``` - Using JustAuth @@ -162,11 +162,11 @@ I look forward to your joining us. ## Contributors -[contributors](https://docs.justauth.whnb.wang/#/contributors) +[contributors](https://justauth.wiki/#/contributors) ## Change Logs -[CHANGELOGS](https://docs.justauth.whnb.wang/#/update) +[CHANGELOGS](https://justauth.wiki/#/update) ## Recommend diff --git a/README.md b/README.md index c3760d19ee35c245ce93c61f19d4fade0ec06c5b..8f5dfee3f64cbedc122f1d24713f247896f53de6 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@

- +

Login, so easy.

- + @@ -15,9 +15,9 @@ - + - + @@ -71,7 +71,7 @@ -

查看更多
+
查看更多
------------------------------------------------------------------------------- @@ -80,7 +80,7 @@ JustAuth,如你所见,它仅仅是一个**第三方授权登录**的**工具类库**,它可以让我们脱离繁琐的第三方登录SDK,让登录变得**So easy!** 项目开源地址:[gitee](https://gitee.com/yadong.zhang/JustAuth) | [github](https://github.com/zhangyd-c/JustAuth) -项目文档:[参考文档](https://docs.justauth.whnb.wang) +项目文档:[参考文档](https://justauth.wiki) ## 特点 @@ -96,7 +96,7 @@ JustAuth,如你所见,它仅仅是一个**第三方授权登录**的**工具 me.zhyd.oauth JustAuth - 1.15.5 + 1.15.6 ``` - 调用api @@ -163,11 +163,11 @@ authRequest.login(callback); ## 贡献者名单 -[contributors](https://docs.justauth.whnb.wang/#/contributors) +[contributors](https://justauth.wiki/#/contributors) ## 更新记录 -[CHANGELOGS](https://docs.justauth.whnb.wang/#/update) +[CHANGELOGS](https://justauth.wiki/#/update) ## 致谢 @@ -185,7 +185,7 @@ authRequest.login(callback); - `spring-boot-demo` 深度学习并实战 spring boot 的项目: [https://github.com/xkcoding/spring-boot-demo](https://github.com/xkcoding/spring-boot-demo) - `mica` SpringBoot 微服务高效开发工具集: [https://github.com/lets-mica/mica](https://github.com/lets-mica/mica) - `pig` 宇宙最强微服务认证授权脚手架(架构师必备): [https://gitee.com/log4j/pig](https://gitee.com/log4j/pig) -- `SpringBlade` 完整的线上解决方案(企业开发必备): https://gitee.com/smallc/SpringBlade +- `SpringBlade` 完整的线上解决方案(企业开发必备): [https://gitee.com/smallc/SpringBlade](https://gitee.com/smallc/SpringBlade) - `MaxKey` 马克思的钥匙,寓意是最大钥匙,是用户单点登录认证系统(Sigle Sign On System),OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS等标准化的开放协议,使用JustAuth集成OAuth第三方认证。: [https://shimingxy.github.io/MaxKey/](https://shimingxy.github.io/MaxKey/) ## 关注&交流 diff --git a/bin/version.txt b/bin/version.txt index d32434904bcb301ec02113568dfb2863a8290327..04cc99945d2e190b24fa4b13f840968c07eae23f 100644 --- a/bin/version.txt +++ b/bin/version.txt @@ -1 +1 @@ -1.15.5 +1.15.6 diff --git a/docs/Q&A.md b/docs/Q&A.md deleted file mode 100644 index 75316d52f84e5782a5eddb80418cedbbe031864a..0000000000000000000000000000000000000000 --- a/docs/Q&A.md +++ /dev/null @@ -1,164 +0,0 @@ -## 1.项目编译报错 - **问题描述** - -在使用JustAuth时,`AuthConfig.builder()`报错,提示没有`builder()`方法 - - **解决方案:** - -安装完lombok插件即可 - -[eclipse安装lombok](https://www.zhyd.me/article/61) - - **idea安装lombok:** file->settings->plugins->Browse Repositories->输入`lombok`,点击搜索->选中lombok点击install->安装完成后重启idea - - **进阶版问题:** -idea中安装完lombok并重启idea之后,启动项目仍然报错: -![输入图片说明](https://gitee.com/uploads/images/2018/0522/153610_ffe84828_784199.png "1.png") - **解决办法** -![输入图片说明](https://gitee.com/uploads/images/2018/0522/153715_75193de5_784199.jpeg "2.jpg") -默认是eclipse 选择javac就可以了 - - -## 2.~~升级到1.8.0后如何启用state?~~ - -~~在原api使用方法的基础上,为config追加一个state即可。~~ -``` -AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder() - .clientId("clientId") - .clientSecret("clientSecret") - .redirectUri("redirectUri") - .state("state") // 就是这儿 - .build()); -``` - -## 3.~~升级到1.8.0后login方法报错?~~ - -~~这是因为1.8.0版本中新增了[AuthCallback](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/model/AuthCallback.java)类,这个类封装了所有可能的回调参数。目前包含以下三个参数:~~ -- ~~`code`: 访问AuthorizeUrl后回调时带的参数code,用来换取token~~ -- ~~`auth_code`: 支付宝授权登陆时不会返回code而是返回`auth_code`参数~~ -- ~~`state`: 访问AuthorizeUrl后回调时带的参数state,用于和请求AuthorizeUrl前的state比较,防止CSRF攻击~~ - -~~1.8.0版本之后的api,可以直接用AuthCallback类作为回调方法的入参,比如:~~ -``` -@RequestMapping("/callback/{source}") -public Object login(@PathVariable("source") String source, AuthCallback callback) { - System.out.println("进入callback:" + source + " callback params:" + JSONObject.toJSONString(callback)); - AuthRequest authRequest = getAuthRequest(source); - AuthResponse response = authRequest.login(callback); - System.out.println(JSONObject.toJSONString(response)); - return response; -} -``` - ~~_代码截取自_ :https://github.com/justauth/JustAuth-demo~~ - -## 4.~~升级到1.8.0后对于state参数有什么特殊要求吗?~~ - -~~理论上没有,stata只是用来保持会话状态,因为http协议的无状态性,从授权到回调,无法感知具体是哪个用户触发的。所以可以使用state作为校验。注:state参数每次完整的授权链中只可用一次!(也是为了防止不必要的危险)~~ - -~~作者建议state命名格式如下:~~ -- ~~授权登录:`{source}_{ip}_{random}`~~ -- ~~账号绑定:`{source}_{userId}_{ip}_{random}`~~ - -~~其中`source`表示授权平台,可以直接去JustAuth中的source,`ip`为当前用户的ip(部分情况可能不适用),`random`为随机字符串,`userId`为当前登录用户的id。~~ - -~~注:`authorize`和`login`(不是指回调传回的`state`,而是声明`request`时传入的`state`)中传的`state`务必保证一致~~ - -## 5.升级到1.9.3+版本后编译失败 - -主要明显的就是`IpUtils.getIp`和request的`.state`报错。 - -这是因为从`v1.9.3`版本开始,对项目进行了一些优化,具体优化内容参考:[v1.9.3](https://gitee.com/yadong.zhang/JustAuth/releases/v1.9.3)和[v1.9.4](https://gitee.com/yadong.zhang/JustAuth/releases/v1.9.4)。 - -新版本的使用方式,参考[JustAuth-demo](https://github.com/justauth/JustAuth-demo/blob/master/src/main/java/me/zhyd/justauth/RestAuthController.java) -``` -@RequestMapping("/render/{source}") -public void renderAuth(@PathVariable("source") String source, HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(source); - String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); - response.sendRedirect(authorizeUrl); -} -@RequestMapping("/callback/{source}") -public Object login(@PathVariable("source") String source, AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(source); - AuthResponse response = authRequest.login(callback); - return response; -} -``` - -## 6.升级到最新版本后为什么支付宝登录不能用了? - -在升级到新版后,使用支付宝登录会提示`ClassNotFoundExcption`异常,这是因为从`1.9.4`版本开始,JustAuth将不在强依赖`alipay-sdk-java`,如果你需要用到Alipay的授权登陆,那么你还需要添加以下依赖: - -``` - - com.alipay.sdk - alipay-sdk-java - 3.7.4.ALL - -``` - -## 7.“Scope参数错误或者Scope没有权限”是怎么回事? - -微信开放平台授权登录提示“Scope参数错误或者Scope没有权限” - -![Scope参数错误或者Scope没有权限](./_media/scope_error.png) - -解决办法:请检查微信开放平台的应用是否有“微信登录”接口的权限。 - -![“微信登录”接口](./_media/scope_error2.png) - -“接口状态”必须为“已获得”! - -## 8.微信登录时能在微信端提示登录成功吗? - -不可以,这是**微信公众平台**的功能,截至到目前(JustAuth v1.12.0)为止,暂不支持**微信公众平台**的授权登录 - -## 9.微信登录时能不需要手机确认吗?扫码后就自动登录 - -不可以,微信开放平台不支持这种操作。可以把微信扫码登录理解成qq用账号密码登录,扫完码后不手动点确认,微信怎么知道用户是否同意了授权? -当然,**微信公众平台**的授权流程可以越过这个限制,只要关注了公众号,后续扫码成功后就会自动登录,但是这是**微信公众平台**的功能,截至到目前(JustAuth v1.12.0)为止,暂不支持**微信公众平台**的授权登录 - -## 10.本地如何测那些*不支持本地地址回调*的授权登录? - -推荐几种方案: -1. 改`hosts`,然后将测试程序的端口改为`80` -2. 使用`Nginx`/`Apache`做代理 -3. FRP内网穿透,参考地址:[使用内网穿透的方式集成第三方登录](https://xkcoding.com/2019/05/22/spring-boot-login-with-oauth.html) - -## 11.如何获取QQ登录的`unionId`? - -在AuthConfig中设备`unionId`为`true` - -```java -AuthRequest authRequest = new AuthQqRequest(AuthConfig.builder() - .clientId("clientId") - .clientSecret("clientSecret") - .redirectUri("redirectUri") - .unionId(true) - .build()); -``` -> 注:使用unionId要求开发者必须已在qq开放平台申请了获取unionId的权限,否则可能会发生错误!切记!参考链接:[unionid介绍](http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D) - -## 12. `AuthCallback`报错? - -在使用JustAuth 1.13.0时,遇到如下所示错误: -![](./_media/authcallback_error.png) - -这是因为我没有做好代码审查和测试,所以才导致的问题。我检讨!深刻的检讨! - -请遇到该问题的朋友及时升级到最新版本(`1.13.1`修复该问题) - -ps: 我要去祭天了 - -## 13. 为什么集成国外平台时,一直提示 `connect time out`? - -所有国外平台都无法直接通过java进行访问API,目前[simple-http](https://github.com/xkcoding/simple-http) Release版本,暂不支持添加代理,所以目前需要手动开启代理。 - -代理开启的方式: -```java -System.setProperty("proxyPort", "10080"); -System.setProperty("proxyHost", "127.0.0.1"); -``` -以上代码可以在声明 `AuthRequest` 时创建,也可以全局执行。 - -本地如果支持科学上网,就用自己本地的代理端口即可,如果不支持科学上网,可以去网上找一些免费的代理IP进行测试(请自行操作)。 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 289b0383ff8d916365488e13ef4e41a80006d8a8..0000000000000000000000000000000000000000 --- a/docs/README.md +++ /dev/null @@ -1,110 +0,0 @@ -

- -

-

- Login, so easy! -

-

- 史上最全的整合第三方登录的开源库 -

-

- - - - - - - - - - - - - - - - - - - - star - - - github star - -

-

- 开源地址: Gitee | Github -

-

- QQ群:230017570 -

-

- 文档更新日期: {docsify-updated} -

- -## 简介 - -JustAuth,如你所见,它仅仅是一个**第三方授权登录**的**工具类库**,它可以让我们脱离繁琐的第三方登录SDK,让登录变得**So easy!** - -## 特点 - -废话不多说,就俩字: - -1. **全**:已集成十多家第三方平台(国内外常用的基本都已包含),仍然还在持续扩展中([开发计划](https://gitee.com/yadong.zhang/JustAuth/issues/IUGRK))! -2. **简**:API就是奔着最简单去设计的,尽量让您用起来没有障碍感! - -## 项目关注度趋势 - -[![Stargazers over time](https://starchart.cc/justauth/JustAuth.svg)](https://starchart.cc/justauth/JustAuth) - -JustAuth - Login, so easy! | Product Hunt Embed - -## 参与&贡献 - -JustAuth的发展离不开朋友们的支持,时至今日,JustAuth已渐趋完善,但仍有很大的改善空间。欢迎各位朋友为JustAuth贡献一份力量。 - -### 提供bug或建议 - -- [Gitee](https://gitee.com/yadong.zhang/JustAuth/issues) -- [Github](https://github.com/justauth/JustAuth/issues) - -如果你正在使用JustAuth,可以在这儿留下你的足迹,获得优先推送、曝光 - -- [Gitee](https://gitee.com/yadong.zhang/JustAuth/issues/IZ2T7) -- [Github](https://github.com/justauth/JustAuth/issues/17) - -### 贡献代码的步骤 - -1. fork本项目到自己的repo -2. 把fork过去的项目也就是你仓库中的项目clone到你本地 -3. 修改代码(`dev`分支) -4. commit后push到自己的仓库 -5. 发起PR(pull request) 请求,提交到`dev`分支 -6. 等待合并 - -### 注意事项 - -1. JustAuth只接受集成**OAuth2.0**的平台 -2. 建议安装“**阿里编码规约**”插件,然后进行开发 -3. 提交PR前请格式化好自己的代码 -4. 注释规范,自定义的方法一定要加上:方法说明、参数说明、返回值说明等 - -## 功能尝鲜 - -JustAuth一共有两个主要分支: -- 线上版分支(master):稳定版,发布版就是这个分支的代码 -- 开发版分支(dev):不保证稳定,新功能都会优先推送到该分支,对于想尝鲜的朋友,可以直接下载代码,然后源码编译dev分支 - -## 开源推荐 -- `spring-boot-demo` 深度学习并实战 spring boot 的项目: [https://github.com/xkcoding/spring-boot-demo](https://github.com/xkcoding/spring-boot-demo) -- `mica` SpringBoot 微服务高效开发工具集: [https://github.com/lets-mica/mica](https://github.com/lets-mica/mica) -- `pig` 宇宙最强微服务认证授权脚手架(架构师必备): [https://gitee.com/log4j/pig](https://gitee.com/log4j/pig) -- `SpringBlade` 完整的线上解决方案(企业开发必备): https://gitee.com/smallc/SpringBlade - -## 捐赠 - -| 支付宝 | 微信 | -| :------------: | :------------: | -| | | - diff --git a/docs/_404.md b/docs/_404.md deleted file mode 100644 index d762b410a0151e948538431b07755fb7bde017e1..0000000000000000000000000000000000000000 --- a/docs/_404.md +++ /dev/null @@ -1,45 +0,0 @@ -# :alien: 404:alien: - -**非常感谢您对JustAuth的关注**,您现在查询的内容,作者**正在补充**中! - -### 您可能对以下文章感兴趣: - -- [OAuth的授权流程是什么样的?](https://docs.justauth.whnb.wang/#/oauth) -- [如何使用JustAuth?](https://docs.justauth.whnb.wang/#/how-to-use) -- [提问与回答?](https://docs.justauth.whnb.wang/#/Q&A) -- [如何集成Github?](https://docs.justauth.whnb.wang/#/oauth/github) -- [如何集成Gitee?](https://docs.justauth.whnb.wang/#/oauth/gitee) -- [如何集成支付宝?](https://docs.justauth.whnb.wang/#/oauth/alipay) -- [如何自定义state?](https://docs.justauth.whnb.wang/#/customize-the-state-cache) -- [如何自定义接入自己搭建的oauth平台?](https://docs.justauth.whnb.wang/#/customize-the-oauth) -- [有哪些配套项目?](https://docs.justauth.whnb.wang/#/supporting) - -### 想使用JustAuth集成第三方OAuth登录? - -- [Gitee登录](oauth/gitee.md) -- [Github登录](oauth/github.md) -- [qq登录](oauth/qq.md) -- [微信开放平台登录](oauth/wechat_open.md) -- [微博登录](oauth/weibo.md) -- [支付宝登录](oauth/alipay.md) -- [酷家乐登录](oauth/kujiale.md) -- 更多文章,正在补充中... - -### 其他资料 - -- [参考文档](references.md) - -### 如果还是没有您想要的内容,您可以: - -1. (建议) 提Issue: 【[github](https://github.com/justauth/JustAuth/issues)】 | 【[gitee](https://gitee.com/yadong.zhang/JustAuth/issues)】 -2. 点击本页面右下角【OPEN CHAT】开始在线聊天 -3. 本页面底部直接留言 -4. 关注公众号(公众号会不定期推送相关内容),扫下方二维码关注公众号: - - - -4. 加微信群(群内有各个优秀开源项目的作者和技术大神),微信扫下方二维码后加我好友(**注:一定要备注JustAUth,无备注的一律不加**): - - - -5. 加QQ群:QQ搜索`230017570`(该QQ群为JustAuth官方技术讨论群,禁止群内打广告!) \ No newline at end of file diff --git a/docs/_coverpage.md b/docs/_coverpage.md deleted file mode 100644 index dd34383c5b65abe574aa2def9efc3aff092c8811..0000000000000000000000000000000000000000 --- a/docs/_coverpage.md +++ /dev/null @@ -1,16 +0,0 @@ - -![](_media/justauth@0,25x.png) -# JustAuth 1.15.5 - -史上最全的整合第三方登录的开源库 - -Login, so easy - -

已集成国内外十多家平台

-

极简的API设计

- - -[Gitee](https://gitee.com/yadong.zhang/JustAuth) -[Github](https://github.com/zhangyd-c/JustAuth) -[Get Started](#简介) - diff --git a/docs/_media/authcallback_error.png b/docs/_media/authcallback_error.png deleted file mode 100644 index 49263f5374fda5e4146e332ec58f5cb4a0e1c85a..0000000000000000000000000000000000000000 Binary files a/docs/_media/authcallback_error.png and /dev/null differ diff --git a/docs/_media/contributor/f4af112a.png b/docs/_media/contributor/f4af112a.png deleted file mode 100644 index 1832cc122cb58718fcf63f43ec6dfd2bd2c2bdfd..0000000000000000000000000000000000000000 Binary files a/docs/_media/contributor/f4af112a.png and /dev/null differ diff --git a/docs/_media/cover.png b/docs/_media/cover.png deleted file mode 100644 index 442ab48f0017c0fd222da922be864bb234aef1ee..0000000000000000000000000000000000000000 Binary files a/docs/_media/cover.png and /dev/null differ diff --git a/docs/_media/custom/gitlab.png b/docs/_media/custom/gitlab.png deleted file mode 100644 index 567f6fcd0850cf2ca54bc127b050d410b2699b25..0000000000000000000000000000000000000000 Binary files a/docs/_media/custom/gitlab.png and /dev/null differ diff --git a/docs/_media/custom/gitlab2.png b/docs/_media/custom/gitlab2.png deleted file mode 100644 index 26b904d13493196a9f345487339989f56b20e823..0000000000000000000000000000000000000000 Binary files a/docs/_media/custom/gitlab2.png and /dev/null differ diff --git a/docs/_media/custom/gitlab3.png b/docs/_media/custom/gitlab3.png deleted file mode 100644 index 679930a2a1394ba5e40830bc1cc064794699dfe0..0000000000000000000000000000000000000000 Binary files a/docs/_media/custom/gitlab3.png and /dev/null differ diff --git a/docs/_media/custom/gitlab4.png b/docs/_media/custom/gitlab4.png deleted file mode 100644 index 4049d38efe3829f820e9b7f189edc3a5e452c2c0..0000000000000000000000000000000000000000 Binary files a/docs/_media/custom/gitlab4.png and /dev/null differ diff --git a/docs/_media/extended/justauth_integrated_with_the_existing_account_system.png b/docs/_media/extended/justauth_integrated_with_the_existing_account_system.png deleted file mode 100644 index b257adb044becd6e214ec46be3171c834065d129..0000000000000000000000000000000000000000 Binary files a/docs/_media/extended/justauth_integrated_with_the_existing_account_system.png and /dev/null differ diff --git a/docs/_media/justauth@0,1x.png b/docs/_media/justauth@0,1x.png deleted file mode 100644 index 88a8e06a7be863ffc0053d2a120920021b7a1e73..0000000000000000000000000000000000000000 Binary files a/docs/_media/justauth@0,1x.png and /dev/null differ diff --git a/docs/_media/justauth@0,25x.png b/docs/_media/justauth@0,25x.png deleted file mode 100644 index 878ee601545a31abfc9b20ba1eda65af73cae92c..0000000000000000000000000000000000000000 Binary files a/docs/_media/justauth@0,25x.png and /dev/null differ diff --git a/docs/_media/justauth_live.png b/docs/_media/justauth_live.png deleted file mode 100644 index d769c46e8a48075ad3b27f9cf3742650c8953967..0000000000000000000000000000000000000000 Binary files a/docs/_media/justauth_live.png and /dev/null differ diff --git a/docs/_media/oauth/2055a056.png b/docs/_media/oauth/2055a056.png deleted file mode 100644 index 222fd022a81ec7a4389cd760e8d75378e9bbdd0d..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/2055a056.png and /dev/null differ diff --git a/docs/_media/oauth/2f1b9c2c.png b/docs/_media/oauth/2f1b9c2c.png deleted file mode 100644 index d3e734bc1b75534b5b5f801696bcddaa8ab326b3..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/2f1b9c2c.png and /dev/null differ diff --git a/docs/_media/oauth/4f3da199.png b/docs/_media/oauth/4f3da199.png deleted file mode 100644 index 59a963952f4a19559f9273d3426b8ea8a54edd23..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/4f3da199.png and /dev/null differ diff --git a/docs/_media/oauth/673628f8.png b/docs/_media/oauth/673628f8.png deleted file mode 100644 index ab122256d966396fef1f9fbf5b428291eeab492e..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/673628f8.png and /dev/null differ diff --git a/docs/_media/oauth/7bc9ea47.png b/docs/_media/oauth/7bc9ea47.png deleted file mode 100644 index e5468d9433e6c04f6ddd4b4273e93e8f7716ed09..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/7bc9ea47.png and /dev/null differ diff --git a/docs/_media/oauth/7fded4b4.png b/docs/_media/oauth/7fded4b4.png deleted file mode 100644 index e1d07afef160adfd9366558e62d0f202a7137515..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/7fded4b4.png and /dev/null differ diff --git a/docs/_media/oauth/930e0825.png b/docs/_media/oauth/930e0825.png deleted file mode 100644 index 62aa374a96f9a447b15021a8dfdfa37024914d79..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/930e0825.png and /dev/null differ diff --git a/docs/_media/oauth/ac549f1a.png b/docs/_media/oauth/ac549f1a.png deleted file mode 100644 index 0508fbb8b158d8d8da5a6c638a7bee64143fd2be..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/ac549f1a.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_01.png b/docs/_media/oauth/alipay_01.png deleted file mode 100644 index 9edb2ca3e9e976e6839c3716a6135ac9cca2ce38..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_01.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_02.png b/docs/_media/oauth/alipay_02.png deleted file mode 100644 index 88fecef73912364cfc986649195c4e35213b8fc9..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_02.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_03.png b/docs/_media/oauth/alipay_03.png deleted file mode 100644 index 52a6e510a28b351e7deb3d1e66a49f13c16c96ad..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_03.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_04.png b/docs/_media/oauth/alipay_04.png deleted file mode 100644 index c068f7b83fa72b9255ceda174f08f1cf804f76d7..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_04.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_05.png b/docs/_media/oauth/alipay_05.png deleted file mode 100644 index 556b90e8f80c26a447c17ddea2ec3797b2d70b75..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_05.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_06.png b/docs/_media/oauth/alipay_06.png deleted file mode 100644 index 071a8629aa7c1f04d8c804d5e1b7579bceff27fe..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_06.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_07.png b/docs/_media/oauth/alipay_07.png deleted file mode 100644 index 8f2b4d18e5d1555228a26f4eca6a1aa085278f6f..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_07.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_08.png b/docs/_media/oauth/alipay_08.png deleted file mode 100644 index 13c67a0c0a606da8aa9419877d3189a9306d0530..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_08.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_09.png b/docs/_media/oauth/alipay_09.png deleted file mode 100644 index ee5135ca0ec468642db221bc841a2ca815f3869c..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_09.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_10.png b/docs/_media/oauth/alipay_10.png deleted file mode 100644 index 8757288ee18a0a27d9e179bdcb959f734e8de49f..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_10.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_11.png b/docs/_media/oauth/alipay_11.png deleted file mode 100644 index 76d5844e784e9847ee31cbe881de37704b63c4c3..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_11.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_12.png b/docs/_media/oauth/alipay_12.png deleted file mode 100644 index 87cde9a53e3116e6802c566af1b2a886bc7a17ca..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_12.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_13.png b/docs/_media/oauth/alipay_13.png deleted file mode 100644 index 61378a26f51e1615f322a91f4906b3e48b580d7b..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_13.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_14.png b/docs/_media/oauth/alipay_14.png deleted file mode 100644 index 1c52d1e22a4987935c46c904f3dd587b150bbd28..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_14.png and /dev/null differ diff --git a/docs/_media/oauth/alipay_15.png b/docs/_media/oauth/alipay_15.png deleted file mode 100644 index 38e47f08d849f1533081a3b9a108a4a5b8d51ad3..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/alipay_15.png and /dev/null differ diff --git a/docs/_media/oauth/ca78b40f.png b/docs/_media/oauth/ca78b40f.png deleted file mode 100644 index 81facf84f8efc85e3b9e3244619c8e9e86c0e695..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/ca78b40f.png and /dev/null differ diff --git a/docs/_media/oauth/f44fb011.png b/docs/_media/oauth/f44fb011.png deleted file mode 100644 index fca71ad3006f1353be1b43011b2e9f88729056c1..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/f44fb011.png and /dev/null differ diff --git a/docs/_media/oauth/gitee_01.png b/docs/_media/oauth/gitee_01.png deleted file mode 100644 index 3c8d6edd6b6fec39a2b4fa684d355ac961dcf05e..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/gitee_01.png and /dev/null differ diff --git a/docs/_media/oauth/gitee_02.png b/docs/_media/oauth/gitee_02.png deleted file mode 100644 index 03e6778adc4075aa37988a85c668c9f68d072f0b..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/gitee_02.png and /dev/null differ diff --git a/docs/_media/oauth/gitee_03.png b/docs/_media/oauth/gitee_03.png deleted file mode 100644 index 6987ab9a22c394a19bdaaf900c409e37fcd6844c..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/gitee_03.png and /dev/null differ diff --git a/docs/_media/oauth/gitee_04.png b/docs/_media/oauth/gitee_04.png deleted file mode 100644 index 4d1e91eaecb1b46ae816db5a83b6e87eee816025..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/gitee_04.png and /dev/null differ diff --git a/docs/_media/oauth/github_01.png b/docs/_media/oauth/github_01.png deleted file mode 100644 index d664cfca253ff52c2a090162bf1f1d974bcf201f..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/github_01.png and /dev/null differ diff --git a/docs/_media/oauth/github_02.png b/docs/_media/oauth/github_02.png deleted file mode 100644 index 8514bbd99082869a55edad8672331fd2f3d4f824..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/github_02.png and /dev/null differ diff --git a/docs/_media/oauth/github_03.png b/docs/_media/oauth/github_03.png deleted file mode 100644 index 1bdc1ec02dba01670036526eea01dfefd1a5923f..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/github_03.png and /dev/null differ diff --git a/docs/_media/oauth/github_04.png b/docs/_media/oauth/github_04.png deleted file mode 100644 index 14548fb3c65fc909dc0c06a35c3834e8e3c3a187..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/github_04.png and /dev/null differ diff --git a/docs/_media/oauth/github_05.png b/docs/_media/oauth/github_05.png deleted file mode 100644 index e7ccb53b5ab0df7337bd9ea60db4a153eed59304..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/github_05.png and /dev/null differ diff --git a/docs/_media/oauth/github_06.png b/docs/_media/oauth/github_06.png deleted file mode 100644 index 06cd6a7cee00f790ec7dd9dde276bbe9f9a2b62b..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/github_06.png and /dev/null differ diff --git a/docs/_media/oauth/kujiale_1.png b/docs/_media/oauth/kujiale_1.png deleted file mode 100644 index 02eb4626367e0919baa6455465919212c120dce4..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/kujiale_1.png and /dev/null differ diff --git a/docs/_media/oauth/kujiale_2.png b/docs/_media/oauth/kujiale_2.png deleted file mode 100644 index dac82e0be86417772c41f31cc47f2d4ce8d56847..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/kujiale_2.png and /dev/null differ diff --git a/docs/_media/oauth/kujiale_3.png b/docs/_media/oauth/kujiale_3.png deleted file mode 100644 index 71552ff005f90a025a4e652715a97e7e32dec024..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/kujiale_3.png and /dev/null differ diff --git a/docs/_media/oauth/kujiale_4.png b/docs/_media/oauth/kujiale_4.png deleted file mode 100644 index 5dc48a1fdf88af297bb8305a90294b2509d95967..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/kujiale_4.png and /dev/null differ diff --git a/docs/_media/oauth/kujiale_5.png b/docs/_media/oauth/kujiale_5.png deleted file mode 100644 index 1dd25bfe743adb4a88fa285d89cf9c619ad313e1..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/kujiale_5.png and /dev/null differ diff --git a/docs/_media/oauth/kujiale_6.png b/docs/_media/oauth/kujiale_6.png deleted file mode 100644 index 5af409b772882ee2042d65edb65bf02c6498087d..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/kujiale_6.png and /dev/null differ diff --git a/docs/_media/oauth/qq_01.png b/docs/_media/oauth/qq_01.png deleted file mode 100644 index aca44b6526452f878d177d010393b27335ff7bea..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/qq_01.png and /dev/null differ diff --git a/docs/_media/oauth/wechat_01.png b/docs/_media/oauth/wechat_01.png deleted file mode 100644 index fa3fdb2aa41559f70472ad7c19e5626a468ad9c1..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/wechat_01.png and /dev/null differ diff --git a/docs/_media/oauth/wechat_02.png b/docs/_media/oauth/wechat_02.png deleted file mode 100644 index d434c08054543802b0b1e94ffa958f39b57d5fc2..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/wechat_02.png and /dev/null differ diff --git a/docs/_media/oauth/wechat_03.png b/docs/_media/oauth/wechat_03.png deleted file mode 100644 index 10fd90cf950939c941123c1e03ad02827cdbe8ff..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/wechat_03.png and /dev/null differ diff --git a/docs/_media/oauth/wechat_04.png b/docs/_media/oauth/wechat_04.png deleted file mode 100644 index 91afa0708df422ed153b1b6040c0f15dab2e30dc..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/wechat_04.png and /dev/null differ diff --git a/docs/_media/oauth/wechat_05.png b/docs/_media/oauth/wechat_05.png deleted file mode 100644 index 7d4066f0fc09b2600a86850ae1aa6dc5f6ef278a..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/wechat_05.png and /dev/null differ diff --git a/docs/_media/oauth/wechat_06.png b/docs/_media/oauth/wechat_06.png deleted file mode 100644 index 8d278390fa940c488271b05e902181a499437d0c..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/wechat_06.png and /dev/null differ diff --git a/docs/_media/oauth/wechat_07.png b/docs/_media/oauth/wechat_07.png deleted file mode 100644 index 8a86a6df44b2643779f542c3edc5bc6341c6af5c..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/wechat_07.png and /dev/null differ diff --git a/docs/_media/oauth/weibo_01.png b/docs/_media/oauth/weibo_01.png deleted file mode 100644 index 9c2903861a3b1cdedfcc1acb5b7987a8cf67c33d..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/weibo_01.png and /dev/null differ diff --git a/docs/_media/oauth/weibo_02.png b/docs/_media/oauth/weibo_02.png deleted file mode 100644 index 4b39e41e8a8961d89ec5a6cbbf803f68a73b5292..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/weibo_02.png and /dev/null differ diff --git a/docs/_media/oauth/weibo_03.png b/docs/_media/oauth/weibo_03.png deleted file mode 100644 index 43e8a3819ce399c0d27785fd7a5572ed8dbf0938..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/weibo_03.png and /dev/null differ diff --git a/docs/_media/oauth/weibo_04.png b/docs/_media/oauth/weibo_04.png deleted file mode 100644 index 88c2687580c6b8829da362e4eb50244ddd2c57c3..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/weibo_04.png and /dev/null differ diff --git a/docs/_media/oauth/weibo_05.png b/docs/_media/oauth/weibo_05.png deleted file mode 100644 index 1d227a999439dfe43d8a407b9a28e5dde25b1ee2..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/weibo_05.png and /dev/null differ diff --git a/docs/_media/oauth/weibo_06.png b/docs/_media/oauth/weibo_06.png deleted file mode 100644 index c4e89c9df0bee469d89e873c725c6a1c107c1569..0000000000000000000000000000000000000000 Binary files a/docs/_media/oauth/weibo_06.png and /dev/null differ diff --git a/docs/_media/scope_error.png b/docs/_media/scope_error.png deleted file mode 100644 index 33f4b8717df38bf8cd49744fdc1dd5c1609e0b96..0000000000000000000000000000000000000000 Binary files a/docs/_media/scope_error.png and /dev/null differ diff --git a/docs/_media/scope_error2.png b/docs/_media/scope_error2.png deleted file mode 100644 index db50aae6b1027ea44bc5152f1da42885e2c9059c..0000000000000000000000000000000000000000 Binary files a/docs/_media/scope_error2.png and /dev/null differ diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index c6d0b2c345135c5536a86e94cb31726328a65750..0000000000000000000000000000000000000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,51 +0,0 @@ -- [入门和使用](README.md) -- [贡献者名单](contributors.md) -- 快速开始 - - [名词解释](explain.md) - - [OAuth流程](oauth.md) - - [如何使用](how-to-use.md) -- [Q&A](Q&A.md) -- 集成第三方 - - [√ Gitee登录](oauth/gitee.md) - - [√ Github登录](oauth/github.md) - - [√ qq登录](oauth/qq.md) - - [√ 微信开放平台登录](oauth/wechat_open.md) - - [√ 微博登录](oauth/weibo.md) - - [√ 支付宝登录](oauth/alipay.md) - - [√ 酷家乐登录](oauth/kujiale.md) - - [√ 推特登录](oauth/twitter.md) - - [√ Coding登录](oauth/coding.md) - - [√ 阿里云登录](oauth/aliyun.md) - - [CSDN登录](oauth/csdn.md) - - [微信企业版登录](oauth/wechatEnterprise.md) - - [微信公众平台登录](oauth/wechat_mp.md) - - [百度登录](oauth/baidu.md) - - [钉钉登录](oauth/dingtalk.md) - - [开源中国登录](oauth/oschina.md) - - [淘宝登录](oauth/taobao.md) - - [Google登录](oauth/google.md) - - [Facebook登录](oauth/facebook.md) - - [抖音登录](oauth/douyin.md) - - [领英登录](oauth/linkedin.md) - - [微软登录](oauth/microsoft.md) - - [小米登录](oauth/mi.md) - - [头条登录](oauth/toutiao.md) - - [Teambition登录](oauth/teambition.md) - - [人人登录](oauth/renren.md) - - [Pinterest登录](oauth/pinterest.md) - - [Stackoverflow登录](oauth/stackoverflow.md) - - [华为登录](oauth/huawei.md) - - [Gitlab登录](oauth/gitlab.md) - - [美团登录](oauth/meituan.md) - - [饿了么登录](oauth/eleme.md) - - [飞书登录](oauth/feishu.md) -- 高级特性 - - [使用State](using-state.md) - - [自定义state缓存](customize-the-state-cache.md) - - [自定义第三方平台的OAuth](customize-the-oauth.md) -- 扩展内容 - - [JustAuth与现有用户系统整合](extended/justauth_integrated_with_the_existing_account_system.md) -- [Who is using](users.md) -- [致谢](thx.md) -- [参考文档](references.md) -- [更新记录](update.md) diff --git a/docs/back/baidu.md b/docs/back/baidu.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/baidu.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/coding.md b/docs/back/coding.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/coding.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/csdn.md b/docs/back/csdn.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/csdn.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/dingtalk.md b/docs/back/dingtalk.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/dingtalk.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/douyin.md b/docs/back/douyin.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/douyin.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/eleme.md b/docs/back/eleme.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/eleme.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/facebook.md b/docs/back/facebook.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/facebook.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/gitlab.md b/docs/back/gitlab.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/gitlab.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/google.md b/docs/back/google.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/google.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/huawei.md b/docs/back/huawei.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/huawei.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/linkedin.md b/docs/back/linkedin.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/linkedin.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/meituan.md b/docs/back/meituan.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/meituan.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/mi.md b/docs/back/mi.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/mi.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/microsoft.md b/docs/back/microsoft.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/microsoft.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/oschina.md b/docs/back/oschina.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/oschina.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/pinterest.md b/docs/back/pinterest.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/pinterest.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/renren.md b/docs/back/renren.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/renren.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/stackoverflow.md b/docs/back/stackoverflow.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/stackoverflow.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/taobao.md b/docs/back/taobao.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/taobao.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/teambition.md b/docs/back/teambition.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/teambition.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/tencentCloud.md b/docs/back/tencentCloud.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/tencentCloud.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/toutiao.md b/docs/back/toutiao.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/toutiao.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/wechatEnterprise.md b/docs/back/wechatEnterprise.md deleted file mode 100644 index 00ff6e4b57c63ff0bf9041d762d4776acca02f47..0000000000000000000000000000000000000000 --- a/docs/back/wechatEnterprise.md +++ /dev/null @@ -1,7 +0,0 @@ -(敬请期待...) - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/back/wechat_mp.md b/docs/back/wechat_mp.md deleted file mode 100644 index ff4be0a26eca5abbe877d4899fb9c919d230fccc..0000000000000000000000000000000000000000 --- a/docs/back/wechat_mp.md +++ /dev/null @@ -1,10 +0,0 @@ -(敬请期待...) - -### 声明: -此文档适用于**微信公众平台**! - -## 1. 申请应用 - -## 2. 集成JustAuth - -## 3. 授权结果 \ No newline at end of file diff --git a/docs/contributors.md b/docs/contributors.md deleted file mode 100644 index 8bfc18c5e7f733a55eacc5ca8978dceae8f270c3..0000000000000000000000000000000000000000 --- a/docs/contributors.md +++ /dev/null @@ -1,38 +0,0 @@ -# 项目贡献者名单 - -> 排序不分先后 - -- · yadong.zhang : [Github] | [Gitee] | [个人网站] -- · yangkai.shen : [Github] | [个人网站] - - 集成微信登录、QQ登录、Google登录、微软登录、小米登录、企业微信登录 - - 优化代码、架构,增加自定义缓存 - - 提供jFinal版demo - - 提供ActFramework版demo - - 提供SpringBoot快速集成的justauth-spring-boot-starter -- · pengisgood : [Github] | [个人网站] - - 集成人人登录、Pinterest登录、StackOverflow登录、Twitter登录 -- · skqing : [Gitee] | [个人网站] - - 修复钉钉登录的部分问题 - - 优化微博登录 -- · dyc12ii : [Gitee] - - 升级fastjson版本至1.2.58 -- · harrylee : [Gitee] - - 升级fastjson依赖到1.2.60 - - 集成京东登录 -- · Veigar : [Github] - - 集成酷家乐登录 -- · 蛋蛋 : [Gitee] | [Github] - - 提供NutzBoot版的demo项目 -- · Braavos96 : [Github] - - 添加测试用例:UrlBuilder 、GlobalAuthUtil -- · Chris Smowton : [Github] - - 添加测试用例:StringUtils -- · githubeacon : [Github] - - 增加飞书授权登录 -- · runningzyp : [Github] - - 修改文案错误 -- · Spet : [Github] - - 集成阿里云授权登录 -- 千年等一回,我只为等你... - -ps: 如有遗漏,请告知 diff --git a/docs/customize-the-oauth.md b/docs/customize-the-oauth.md deleted file mode 100644 index 5926c1291190c3314cf34bc6175602e70276834f..0000000000000000000000000000000000000000 --- a/docs/customize-the-oauth.md +++ /dev/null @@ -1,209 +0,0 @@ -# 自定义第三方平台的OAuth - -[JustAuth](https://github.com/justauth/JustAuth)发展到现在,基本上已经涵盖了国内外大多数知名的网站。[JustAuth](https://github.com/justauth/JustAuth)也一直以它的**全**和**简**,备受各位朋友的厚爱、支持。 - -但现在OAuth技术越来越成熟,越来越多的个人站长或者企业都开始搭建自己的OAuth授权平台,那么针对这种情况,[JustAuth](https://github.com/justauth/JustAuth)并不能做到面面俱到,无法去集成所有支持OAuth的网站(这也是不现实的)。 - -既然考虑到有这种需求,那么就要想办法解决,想办法填补漏洞,不为了自己,也为了陪伴[JustAuth](https://github.com/justauth/JustAuth)一路走来的所有朋友们。 - -[JustAuth](https://github.com/justauth/JustAuth)开发团队也在[v1.12.0](https://github.com/justauth/JustAuth/releases/tag/v1.12.0)版本中新加入了一大特性,就是可以支持任意支持OAuth的网站通过JustAuth实现便捷的OAuth登录! - -下面我们会通过一个小例子,讲解如何使用JustAuth集成自己搭建的GitLab服务。 - -> 注:本节将会使用[JustAuth-demo](https://github.com/justauth/JustAuth-demo)Demo项目进行演示 - -## 搭建Gitlab服务 - -请自行解决,如果已有搭建好的Gitlab私服,请直接进入下面的步骤 - -## 创建应用 - -![gitlab私服创建应用](./_media/custom/gitlab.png) -![gitlab私服应用详情](./_media/custom/gitlab2.png) - -## 实现AuthSource接口 - -`AuthSource.java`是为了提供OAuth平台的API地址的统一接口,提供以下方法供实现: -- `AuthSource#authorize()`: 获取授权url. 必须实现 -- `AuthSource#accessToken()`: 获取accessToken的url. 必须实现 -- `AuthSource#userInfo()`: 获取用户信息的url. 必须实现 -- `AuthSource#revoke()`: 获取取消授权的url. 非必须实现接口(部分平台不支持) -- `AuthSource#refresh()`: 获取刷新授权的url. 非必须实现接口(部分平台不支持) - -**注:** -- 当通过JustAuth扩展实现第三方授权时,请参考`AuthDefaultSource`自行创建对应的枚举类并实现`AuthSource`接口 -- 如果不是使用的枚举类,那么在授权成功后获取用户信息时,需要**单独处理source字段**的赋值 -- 如果扩展了对应枚举类时,在`me.zhyd.oauth.request.AuthRequest#login(AuthCallback)`中可以通过`xx.toString()`获取对应的source - -```java -package me.zhyd.justauth; - -import me.zhyd.oauth.config.AuthSource; - -/** - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @website https://www.zhyd.me - * @date 2019/10/26 16:54 - * @since 1.8 - */ -public enum AuthCustomSource implements AuthSource { - - /** - * 自己搭建的gitlab私服 - */ - MYGITLAB { - /** - * 授权的api - * - * @return url - */ - @Override - public String authorize() { - return "http://gitlab.xxx.com/oauth/authorize"; - } - - /** - * 获取accessToken的api - * - * @return url - */ - @Override - public String accessToken() { - return "http://gitlab.xxx.com/oauth/token"; - } - - /** - * 获取用户信息的api - * - * @return url - */ - @Override - public String userInfo() { - return "http://gitlab.xxx.com/api/v4/user"; - } - } -} -``` - -## 创建自定义的Request - -```java -package me.zhyd.justauth; - -import cn.hutool.http.HttpResponse; -import com.alibaba.fastjson.JSONObject; -import me.zhyd.oauth.cache.AuthStateCache; -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.enums.AuthUserGender; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.model.AuthToken; -import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.request.AuthDefaultRequest; -import me.zhyd.oauth.utils.UrlBuilder; - -/** - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @website https://www.zhyd.me - * @date 2019/10/26 17:00 - * @since 1.8 - */ -public class AuthMyGitlabRequest extends AuthDefaultRequest { - - - public AuthMyGitlabRequest(AuthConfig config) { - super(config, AuthCustomSource.MYGITLAB); - } - - public AuthMyGitlabRequest(AuthConfig config, AuthStateCache authStateCache) { - super(config, AuthCustomSource.MYGITLAB, authStateCache); - } - - @Override - protected AuthToken getAccessToken(AuthCallback authCallback) { - HttpResponse response = doPostAuthorizationCode(authCallback.getCode()); - JSONObject object = JSONObject.parseObject(response.body()); - - this.checkResponse(object); - - return AuthToken.builder() - .accessToken(object.getString("access_token")) - .refreshToken(object.getString("refresh_token")) - .idToken(object.getString("id_token")) - .tokenType(object.getString("token_type")) - .scope(object.getString("scope")) - .build(); - } - - @Override - protected AuthUser getUserInfo(AuthToken authToken) { - HttpResponse response = doGetUserInfo(authToken); - JSONObject object = JSONObject.parseObject(response.body()); - - this.checkResponse(object); - - return AuthUser.builder() - .uuid(object.getString("id")) - .username(object.getString("username")) - .nickname(object.getString("name")) - .avatar(object.getString("avatar_url")) - .blog(object.getString("web_url")) - .company(object.getString("organization")) - .location(object.getString("location")) - .email(object.getString("email")) - .remark(object.getString("bio")) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(source.toString()) - .build(); - } - - private void checkResponse(JSONObject object) { - // oauth/token 验证异常 - if (object.containsKey("error")) { - throw new AuthException(object.getString("error_description")); - } - // user 验证异常 - if (object.containsKey("message")) { - throw new AuthException(object.getString("message")); - } - } - - /** - * 返回带{@code state}参数的授权url,授权回调时会带上这个{@code state} - * - * @param state state 验证授权流程的参数,可以防止csrf - * @return 返回授权地址 - * @since 1.11.0 - */ - @Override - public String authorize(String state) { - return UrlBuilder.fromBaseUrl(super.authorize(state)) - .queryParam("scope", "read_user+openid") - .build(); - } -} -``` - -## 测试效果 - -创建`AuthMyGitlabRequest` -```java -AuthRequest authRequest = new AuthMyGitlabRequest(AuthConfig.builder() - .clientId("63398e403231d4aa7e856cf5413620d536a876cb94e8d10ced0d3191b5d1d246") - .clientSecret("65b0eba68fff019e682e6755882a24dfdbf0a61be55de119cb8970320186c8eb") - .redirectUri("http://127.0.0.1:8443/oauth/callback/mygitlab") - .build()); -``` - -> 注:完整代码都在[JustAuth-demo](https://github.com/justauth/JustAuth-demo)Demo项目中,本节只讲解关键代码 - -登录后的效果为 - -![gitlab私服验证授权](./_media/custom/gitlab3.png) -![gitlab私服登录完成](./_media/custom/gitlab4.png) - - - diff --git a/docs/customize-the-state-cache.md b/docs/customize-the-state-cache.md deleted file mode 100644 index af8e532ef0f76e4212b52d4030052e46f2c5028e..0000000000000000000000000000000000000000 --- a/docs/customize-the-state-cache.md +++ /dev/null @@ -1,123 +0,0 @@ -# 自定义state缓存 -> starter 内置了2种缓存实现,一种是上一节演示的默认实现,另一种是用户自定义的扩展实现。 -本节将会使用[JustAuth-demo](https://github.com/justauth/JustAuth-demo)Demo进行演示扩展Redis缓存的方式,当然了,你也可以自定义实现你自己的缓存。 - -## 添加 Redis 依赖 -```xml - - org.springframework.boot - spring-boot-starter-data-redis - -``` - -### 添加redis配置 - -```xml -# 集成redis实现自定义的state缓存 -spring.redis.database=0 -spring.redis.host=localhost -spring.redis.port=6379 -spring.redis.password=xxxx -``` -### 实现state缓存接口 - -```java -package me.zhyd.justauth; - -import me.zhyd.oauth.cache.AuthCacheConfig; -import me.zhyd.oauth.cache.AuthStateCache; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.ValueOperations; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import java.util.concurrent.TimeUnit; - -/** - * 扩展Redis版的state缓存 - * - * @author yadong.zhang (yadong.zhang0415(a)gmail.com) - * @version 1.0 - * @date 2019/10/24 13:38 - * @since 1.8 - */ -@Component -public class AuthStateRedisCache implements AuthStateCache { - - @Autowired - private RedisTemplate redisTemplate; - - private ValueOperations valueOperations; - - @PostConstruct - public void init() { - valueOperations = redisTemplate.opsForValue(); - } - - /** - * 存入缓存,默认3分钟 - * - * @param key 缓存key - * @param value 缓存内容 - */ - @Override - public void cache(String key, String value) { - valueOperations.set(key, value, AuthCacheConfig.timeout, TimeUnit.MILLISECONDS); - } - - /** - * 存入缓存 - * - * @param key 缓存key - * @param value 缓存内容 - * @param timeout 指定缓存过期时间(毫秒) - */ - @Override - public void cache(String key, String value, long timeout) { - valueOperations.set(key, value, timeout, TimeUnit.MILLISECONDS); - } - - /** - * 获取缓存内容 - * - * @param key 缓存key - * @return 缓存内容 - */ - @Override - public String get(String key) { - return valueOperations.get(key); - } - - /** - * 是否存在key,如果对应key的value值已过期,也返回false - * - * @param key 缓存key - * @return true:存在key,并且value没过期;false:key不存在或者已过期 - */ - @Override - public boolean containsKey(String key) { - return redisTemplate.hasKey(key); - } -} -``` - -### 获取Request - -本节以Gitee为例 - -```java -// 1. 注入新添加的cache -@Autowired -private AuthStateRedisCache stateRedisCache; - -// 2. 创建request时传入stateRedisCache -AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder() - .clientId("clientId") - .clientSecret("clientSecret") - .redirectUri("redirectUri") - .build(), stateRedisCache);// 此处传入自定义实现的类 -``` - - -到此已经完成了通过redis**扩展实现state缓存**的功能。当然,只要你愿意,你可以使用**任何一种**缓存技术去实现这个功能,并不局限于redis。 diff --git a/docs/explain.md b/docs/explain.md deleted file mode 100644 index c0cbb9388a58ad7dddf5d0f3f56270e00e5abd85..0000000000000000000000000000000000000000 --- a/docs/explain.md +++ /dev/null @@ -1,36 +0,0 @@ -本文将就JustAuth中涉及到的一些配置、关键词做一下简单说明,方便使用者理解、使用。 - -## 本文相关名词 - -- `开发者` 指使用`JustAuth`的开发者 -- `第三方` 指开发者对接的第三方网站,比如:QQ平台、微信平台、微博平台 -- `用户` 指最终服务的真实用户 - -## JustAuth中的关键词 - -以下内容了解后,将会使你更容易地上手JustAuth。 - -- `clientId` 客户端身份标识符(应用id),一般在申请完Oauth应用后,由**第三方平台颁发**,唯一 -- `clientSecret` 客户端密钥,一般在申请完Oauth应用后,由**第三方平台颁发** -- `redirectUri` **开发者项目中的有效api地址**。用户在确认第三方平台授权(登录)后,第三方平台会重定向到该地址,并携带code等参数 -- `state` 用来保持授权会话流程完整性,防止CSRF攻击的安全的随机的参数,由**开发者生成** -- `alipayPublicKey` 支付宝公钥。当选择支付宝登录时,必传该值,由**开发者生成** -- `unionId` 是否需要申请unionid,目前只针对**qq登录**。注:qq授权登录时,获取unionid需要单独发送邮件申请权限。如果个人开发者账号中申请了该权限,可以将该值置为true,在获取openId时就会同步获取unionId。参考链接:[UnionID介绍](http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D) -- `stackOverflowKey` Stack Overflow 登陆时需单独提供的key,由**第三方平台颁发** -- `agentId` 企业微信登陆时需单独提供该值,由**第三方平台颁发**,为授权方的网页应用ID -- `source` JustAuth支持的第三方平台,比如:GITHUB、GITEE等 -- `uuid` 一般为第三方平台的用户ID。以下几个平台需特别注意: - - 钉钉、抖音:`uuid` 为用户的 `unionid` - - 微信公众平台登录、京东、酷家乐、美团:`uuid` 为用户的 `openId` - - 微信开放平台登录、QQ:`uuid` 为用户的 `openId`,平台支持获取`unionid`, `unionid` 在 `AuthToken` 中(如果支持),在登录完成后,可以通过 `response.getData().getToken().getUnionId()` 获取 - - Google:`uuid` 为用户的 `sub`,`sub`为Google的所有账户体系中用户唯一的身份标识符,详见:[OpenID Connect](https://developers.google.com/identity/protocols/oauth2/openid-connect) - -注:建议通过`uuid` + `source`的方式唯一确定一个用户,这样可以解决用户身份归属的问题。因为 单个用户ID 在某一平台中是唯一的,但不能保证在所有平台中都是唯一的。 - -## 参考资料 - -关于OAuth2相关的内容、原理可以自行参阅以下资料: - -- [The OAuth 2.0 Authorization Framework](https://tools.ietf.org/html/rfc6749) -- [OAuth 2.0](https://oauth.net/2/) - diff --git a/docs/extended/justauth_integrated_with_the_existing_account_system.md b/docs/extended/justauth_integrated_with_the_existing_account_system.md deleted file mode 100644 index 126bdb965217018741fbda52366e6d59fa0c0671..0000000000000000000000000000000000000000 --- a/docs/extended/justauth_integrated_with_the_existing_account_system.md +++ /dev/null @@ -1,12 +0,0 @@ - -之前在群里经常会看到小伙伴有以下几点疑问: - -- JustAuth如何与现有用户系统整合? -- JustAuth如何实现用户绑定? - -我就此需求,整理了一份**JustAuth与现有用户系统整合逻辑图** - -在线版: [JustAuth与现有用户系统整合](https://www.processon.com/view/link/5e71db29e4b015182029a567) - -![JustAuth与现有用户系统整合](../_media/extended/justauth_integrated_with_the_existing_account_system.png) - diff --git a/docs/how-to-use.md b/docs/how-to-use.md deleted file mode 100644 index ffe53ca7adf4bbd09d1afbc66e7ef2ea54b26546..0000000000000000000000000000000000000000 --- a/docs/how-to-use.md +++ /dev/null @@ -1,202 +0,0 @@ -在前面有介绍到,JustAuth的特点之一就是**简**,极简主义,不给使用者造成不必要的障碍。 - -既然牛皮吹下了, 那么如何才能用JustAuth实现第三方登录呢? - -## 使用步骤 - -使用JustAuth总共分三步(**这三步也适合于JustAuth支持的任何一个平台**): - -1. 申请注册第三方平台的开发者账号 -2. 创建第三方平台的应用,获取配置信息(`accessKey`, `secretKey`, `redirectUri`) -3. 使用该工具实现授权登陆 - -## 使用方式 - -- 引入依赖 -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -获取最新版本:[JustAuth](https://search.maven.org/search?q=g:me.zhyd.oauth%20AND%20a:JustAuth) - -- 调用api -```java -// 创建授权request -AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder() - .clientId("clientId") - .clientSecret("clientSecret") - .redirectUri("redirectUri") - .build()); -// 生成授权页面 -authRequest.authorize("state"); -// 授权登录后会返回code(auth_code(仅限支付宝))、state,1.8.0版本后,可以用AuthCallback类作为回调接口的参数 -// 注:JustAuth默认保存state的时效为3分钟,3分钟内未使用则会自动清除过期的state -authRequest.login(callback); -``` - - -注意,JustAuth从[v1.14.0](https://gitee.com/yadong.zhang/JustAuth/releases/v1.14.0)开始默认集成了的[simple-http](https://github.com/xkcoding/simple-http)作为HTTP通用接口(更新说明见[JustAuth 1.14.0版本正式发布!完美解耦HTTP工具](https://mp.weixin.qq.com/s?__biz=MzA3NDk3OTIwMg==&mid=2450633197&idx=1&sn=11e625b307db62b2f1c4e82f7744b2a2&chksm=88929300bfe51a16562b45592a264482ae2c74c6dbfa4a3aa9611ad4fea4a9be5b1f0545527d&token=1093833287&lang=zh_CN#rd)),鉴于一般项目中都已经集成了HTTP工具,比如OkHttp3、apache HttpClient、hutool-http,因此为了减少不必要的依赖,从[v1.14.0](https://gitee.com/yadong.zhang/JustAuth/releases/v1.14.0)开始JustAuth将不会默认集成hutool-http,如果开发者的项目是全新的或者项目内没有集成HTTP实现工具,请自行添加对应的HTTP实现类,备选依赖如下: - -- hutool-http - - ```xml - - cn.hutool - hutool-http - 5.2.5 - - ``` - -- httpclient - - ```xml - - org.apache.httpcomponents - httpclient - 4.5.12 - - ``` - -- okhttp - - ```xml - - com.squareup.okhttp3 - okhttp - 4.4.1 - - ``` - - -## API分解 - -**JustAuth**的核心就是一个个的`request`,每个平台都对应一个具体的`request`类,所以在使用之前,需要就具体的授权平台创建响应的`request` - -```java -// 创建授权request -AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder() - .clientId("clientId") - .clientSecret("clientSecret") - .redirectUri("redirectUri") - .build()); -``` - -所有可用的`Request`列表请参考:[已集成的平台](https://docs.justauth.whnb.wang/#/README?id=已集成的平台) - -### 获取授权链接 - -```java -String authorizeUrl = authRequest.authorize("state"); -``` -获取到`authorizeUrl`后,可以手动实现redirect到`authorizeUrl`上 - -**伪代码** - -```java -/** - * - * @param source 第三方授权平台,以本例为参考,该值为gitee(因为上面声明的AuthGiteeRequest) - */ -@RequestMapping("/render/{source}") -public void renderAuth(@PathVariable("source") String source, HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(source); - String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); - response.sendRedirect(authorizeUrl); -} -``` - -注:`state`建议必传!`state`在`OAuth`的流程中的主要作用就是保证请求完整性,防止**CSRF**风险,此处传的`state`将在回调时传回 - -### 登录(获取用户信息) - -```java -AuthResponse response = authRequest.login(callback); -``` - -授权登录后会返回code(auth_code(仅限支付宝)、authorization_code(仅限华为))、state,1.8.0版本后,用`AuthCallback`类作为回调接口的入参 - -**伪代码** - -```java -/** - * - * @param source 第三方授权平台,以本例为参考,该值为gitee(因为上面声明的AuthGiteeRequest) - */ -@RequestMapping("/callback/{source}") -public Object login(@PathVariable("source") String source, AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(source); - AuthResponse response = authRequest.login(callback); - return response; -} -``` - -**注:第三方平台中配置的授权回调地址,以本文为例,在创建授权应用时的回调地址应为:`[host]/callback/gitee`** - -### 刷新token - -注:`refresh`功能,并不是每个平台都支持 - -```java -AuthResponse response = authRequest.refresh(AuthToken.builder().refreshToken(token).build()); -``` - -**伪代码** - -```java -/** - * - * @param source 第三方授权平台,以本例为参考,该值为gitee(因为上面声明的AuthGiteeRequest) - * @param token login成功后返回的refreshToken - */ -@RequestMapping("/refresh/{source}") -public Object refreshAuth(@PathVariable("source") String source, String token){ - AuthRequest authRequest = getAuthRequest(source); - return authRequest.refresh(AuthToken.builder().refreshToken(token).build()); -} -``` - -### 取消授权 - -注:`revoke`功能,并不是每个平台都支持 - -```java -AuthResponse response = authRequest.revoke(AuthToken.builder().accessToken(token).build()); -``` - -**伪代码** - -```java -/** - * - * @param source 第三方授权平台,以本例为参考,该值为gitee(因为上面声明的AuthGiteeRequest) - * @param token login成功后返回的accessToken - */ -@RequestMapping("/revoke/{source}/{token}") -public Object revokeAuth(@PathVariable("source") String source, @PathVariable("token") String token) throws IOException { - AuthRequest authRequest = getAuthRequest(source); - return authRequest.revoke(AuthToken.builder().accessToken(token).build()); -} -``` - -## 参考文章 - -- [实现Gitee授权登录](http://t.cn/ExDKxQs) -- [实现Github授权登录](http://t.cn/EJ0Fxqo) -- [Spring Boot 快速集成第三方登录功能](http://t.cn/AiWWx5kH) : QQ、Github、微信、谷歌、微软、小米、企业微信 -- [集成企业微信](https://mp.weixin.qq.com/s?__biz=MzA3NDk3OTIwMg==&mid=2450633170&idx=2&sn=456b70742a86948a193c691f3e47b72e&chksm=8892933fbfe51a29c1da386a2252d4bf91bfbd14e1ac0b99b783763a0d12e2e4b2d7c4369933&token=482455242&lang=zh_CN#rd) - -## 配套项目 - -- [JustAuth-demo](https://github.com/justauth/JustAuth-demo):普通版springboot项目demo -- [jFinal版](https://github.com/xkcoding/jfinal-justauth-demo): Jfinal集成JustAuth的demo by [xkcoding](https://github.com/xkcoding) -- [ActFramework版](https://github.com/xkcoding/act-justauth-demo): ActFramework 集成 JustAuth 的 demo by [xkcoding](https://github.com/xkcoding) -- [Nutzboot版](https://github.com/EggsBlue/nutzboot-justauth-demo): NutzBoot集成JustAuth的demo by [蛋蛋](https://github.com/EggsBlue) -- [Blade版](https://github.com/justauth/blade-justauth-demo): Blade集成JustAuth的demo - -## SpringBoot插件 -- [justauth-spring-boot-starter](https://github.com/xkcoding/justauth-spring-boot-starter): Spring Boot 集成 JustAuth 的最佳实践 by [xkcoding](https://github.com/xkcoding) -- [justauth-spring-security-starter](https://github.com/justauth/justauth-spring-security-starter): JustAuth整合Spring security的 starter依赖 by [luoqiz](https://github.com/luoqiz) diff --git a/docs/index.html b/docs/index.html index c59de988e139745954a792e1781617763fcecba0..4495b27265b027793a25936758969be3beb318a5 100644 --- a/docs/index.html +++ b/docs/index.html @@ -12,126 +12,11 @@ - - - - - - -
Please wait...
- - - - - - - - - - - - - - - - - - - - diff --git a/docs/oauth.md b/docs/oauth.md deleted file mode 100644 index 9b46b35a2b5630121bb7de43a95252c479af8b3f..0000000000000000000000000000000000000000 --- a/docs/oauth.md +++ /dev/null @@ -1,82 +0,0 @@ -# 关于OAuth - -请先查阅以下资料: - -- [The OAuth 2.0 Authorization Framework](https://tools.ietf.org/html/rfc6749) -- [OAuth 2.0](https://oauth.net/2/) - -## OAuth 2 的授权流程 - -### 参与的角色 - -- `Resource Owner` 资源所有者,即代表授权客户端访问本身资源信息的用户(User),也就是应用场景中的“**开发者A**” -- `Resource Server` 资源服务器,托管受保护的**用户账号信息**,比如Github -- `Authorization Server` 授权服务器,**验证用户身份**然后为客户端派发资源访问令牌,比如Github - - `Resource Server`和`Authorization Server` 可以是同一台服务器,也可以是不同的服务器,视具体的授权平台而有所差异 -- `Client` 客户端,即代表意图访问受限资源的**第三方应用** - -### 授权流程 -```html - +--------+ +---------------+ - | |--(A)- Authorization Request ->| Resource | - | | | Owner | - | |<-(B)-- Authorization Grant ---| | - | | +---------------+ - | | - | | +---------------+ - | |--(C)-- Authorization Grant -->| Authorization | - | Client | | Server | - | |<-(D)----- Access Token -------| | - | | +---------------+ - | | - | | +---------------+ - | |--(E)----- Access Token ------>| Resource | - | | | Server | - | |<-(F)--- Protected Resource ---| | - +--------+ +---------------+ -``` - -上面的流程图取自[The OAuth 2.0 Authorization Framework#1.2](https://tools.ietf.org/html/rfc6749#section-1.2) - -**流程解析** - -- (A) 用户打开**客户端**以后,**客户端**要求**用户**给予授权。 -- (B) **用户**同意给予**客户端**授权。 -- (C) **客户端**使用上一步获得的授权,向**认证服务器**申请令牌。 -- (D) **认证服务器**对**客户端**进行认证以后,确认无误,同意发放令牌 -- (E) **客户端**使用令牌,向**资源服务器**申请获取资源。 -- (F) **资源服务器**确认令牌无误,同意向**客户端**开放资源。 - -### 授权许可 `Authorization Grant` - -- Authorization Code - - 结合普通服务器端应用使用(**web**端常用的授权方式) -- Implicit - - 结合移动应用或 Web App 使用 -- Resource Owner Password Credentials - - 适用于受信任客户端应用,例如同个组织的内部或外部应用 -- Client Credentials - - 适用于客户端调用主服务API型应用(比如百度API Store) - -## 直白话 OAuth 2 流程 - -以上流程理解起来可能有些难度,这儿我们给出一个白话版的流程图 - -这儿引入三个角色: -- 用户A:可以理解成你自己 -- 网站B:可以理解成 Oschina -- 第三方C:可以理解成 Github - -需求:你想通过Github第三方登录Oschina。(_注:下面的内容为流程图,如果您在阅读的时候显示为纯文字,请刷新页面_) - -
- sequenceDiagram - 用户A->>网站B: 1.我想登录你 - 网站B->>用户A: 2.我不认识你 - 用户A->>第三方C: 3.老铁我去过你那儿,咱俩认识,你帮我授权给网站B - 第三方C->>网站B: 4.用户A是我老铁,给你他的授权码 - 网站B->>第三方C: 5.这个授权码是你那儿的人吗?是的话给我他的令牌 - 第三方C->>网站B: 6.是我这儿的人,让他登录吧 - 网站B->>用户A: 7.得嘞,您走着 - 用户A->>网站B: 8.登录成功 -
diff --git a/docs/oauth/alipay.md b/docs/oauth/alipay.md deleted file mode 100644 index deca4e05afc14ce953ab6bbf1aec0df4660986a8..0000000000000000000000000000000000000000 --- a/docs/oauth/alipay.md +++ /dev/null @@ -1,223 +0,0 @@ -## 1. 配置应用 - -### 1.1 创建应用 - -#### 1. 进入支付宝开放平台([open.alipay.com](https://open.alipay.com))并登录 -#### 2. 点击“进入我的开放平台” -![](../_media/oauth/alipay_01.png) -#### 3. 通过 **开发者中心-网页&移动应用** 进入应用管理列表页 -![](../_media/oauth/alipay_02.png) -![](../_media/oauth/alipay_03.png) -#### 4. 选择创建 **自定义接入** 应用 -![](../_media/oauth/alipay_04.png) -#### 5. 填入相关信息确认创建 -![](../_media/oauth/alipay_05.png) -#### 6. 进入应用详情后,点击【功能列表】中的【**+添加功能**】按钮,选择【获取会员信息】 -![](../_media/oauth/alipay_06.png) -![](../_media/oauth/alipay_07.png) - -### 1.2 配置密钥 -开发者调用接口前需要先生成RSA密钥,RSA密钥包含应用私钥(APP_PRIVATE_KEY)、应用公钥(APP_PUBLIC_KEY)。生成密钥后在开放平台开发者中心进行密钥配置,配置完成后可以获取支付宝公钥(ALIPAY_PUBLIC_KEY)。 - -接下来我们要在【应用详情】最下面的【开发设置】中,配置密钥相关的内容 -#### 1. 接口加签方式 -此处生成密钥的详细说明可以参考:[生成 RSA 密钥 ](https://docs.open.alipay.com/291/105971/) - -我们这儿简单介绍一种使用“公钥”加签的方式 - -a. 首先下载密钥生成工具:[Windows版](https://ideservice.alipay.com/ide/getPluginUrl.htm?clientType=assistant&platform=win&channelType=WEB)(请不要安装在含有空格的目录路径下) | [MAC_OS版](https://ideservice.alipay.com/ide/getPluginUrl.htm?clientType=assistant&platform=mac&channelType=WEB) - -b. 点击 【生成密钥】 后,工具会自动生成商户应用公钥(public key)和应用私钥(private key),如下图所示: - -![](../_media/oauth/alipay_08.png) - -点击工具界面下方的 【打开文件位置】,即可找到生成的公私钥文件,这儿需要注意! - -工具默认打开的是CSR目录,并不是我们生成的密钥的目录,如下图: - -![](../_media/oauth/alipay_09.png) - -我们只需要往前返回一级目录,就可看到 RSA密钥 文件夹,进入 RSA密钥 目录后就可看到我们刚刚生成的密钥文件,如下图所示: - -![](../_media/oauth/alipay_10.png) - -注意:应用私钥需要在JustAuth中配置。 - -c. 回到应用详情页面,点击【接口加签方式】后面的【设置】按钮,【加签模式】中选择【公钥】,然后在下方输入框中输入之前生成的【应用公钥2048.txt】文件内容 - -![](../_media/oauth/alipay_11.png) - -保存设置后,将会生成一份【支付宝公钥】,注意:这个公钥会在OAuth中使用! - -![](../_media/oauth/alipay_12.png) - -**注意:** - -生成的私钥需**妥善保管,避免遗失,不要泄露**。应用私钥需填写到代码中供签名时使用。应用公钥需提供给支付宝账号管理者上传到支付宝开放平台。 - -#### 2. 接口加签方式 - -关于IP白名单的配置方式,请参考:[开放平台 IP 白名单接入指南 ](https://docs.open.alipay.com/200/ipwhitelist) - -#### 3. 支付宝网关 - -使用默认的即可:https://openapi.alipay.com/gateway.do - -#### 4. 应用网关 - -这是选填字段,主要用来接收支付宝的异步通知。请开发者视个人情况选择使用 - -#### 5. 授权回调地址 - -这是关键内容,JustAuth中需要用到。比如本例配置的回调地址为:https://www.zhyd.me/oauth/callback/alipay - - -以上步骤比较繁杂,主要需要注意保存的信息为: -- 使用【支付宝开放平台开发助手】生成的【应用私钥】(应用私钥2048.txt) -- 配置【接口加签方式】时生成的【支付宝公钥】 -- 授权回调地址 -- APPID(应用详情左侧应用名称下方有标注) - -### 1.3 应用提交审核 - -通过应用详情上方的【提交审核】按钮,将应用提交审核,大约需要1天左右。(ps:本例的应用,我从提交审核到审核完成,大约用了两个小时) - -## 2. 集成JustAuth - - -### 2.1 引入依赖 - -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -``` - - com.alipay.sdk - alipay-sdk-java - 3.7.4.ALL - -``` - -`${latest.version}`表示当前最新的版本,可以在[这儿](https://github.com/justauth/JustAuth/releases)获取最新的版本信息。 - -### 2.2 创建Request - -```java -AuthRequest authRequest = new AuthAlipayRequest(AuthConfig.builder() - .clientId("APPID") - .clientSecret("应用私钥") - .alipayPublicKey("支付宝公钥") - .redirectUri("https://www.zhyd.me/oauth/callback/alipay") - .build()); -``` - -### 2.3 生成授权地址 - -我们可以直接使用以下方式生成第三方平台的授权链接: -```java -String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); -``` -这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到iframe中,适配网站设计。 - - -### 2.4 以上完整代码如下 - -```java -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.request.AuthAlipayRequest; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -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") - public void renderAuth(HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(); - response.sendRedirect(authRequest.authorize(AuthStateUtils.createState())); - } - - @RequestMapping("/callback") - public Object login(AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(); - return authRequest.login(callback); - } - - private AuthRequest getAuthRequest() { - return new AuthAlipayRequest(AuthConfig.builder() - .clientId("APPID") - .clientSecret("应用私钥") - .alipayPublicKey("支付宝公钥") - .redirectUri("https://www.zhyd.me/oauth/callback/alipay") - .build()); - } -} -``` -授权链接访问成功后会看到以下页面内容: -![](../_media/oauth/alipay_13.png) - -手机扫码后会进去确认页面 - -![](../_media/oauth/alipay_14.png) - -手机端点击确认后,web端将会跳转到授权认证页面 - -![](../_media/oauth/alipay_15.png) - -点击同意授权即可完成支付宝的oauth登录。 - -## 3. 授权结果 - -```json -{ - "code": 2000, - "msg": null, - "data": { - "uuid": "208xxxxx37", - "username": "张", - "nickname": "张", - "avatar": "https://tfs.alipayobjects.com/images/partner/T1vzlgXj8cXXXXXXXX", - "blog": null, - "company": null, - "location": "北京 北京市", - "email": null, - "remark": null, - "gender": "MALE", - "source": "ALIPAY", - "token": { - "accessToken": "authxxxx2d5b0a182A53", - "expireIn": 1296000, - "refreshToken": "authuxxxx4c1b0edb2X53", - "uid": "208xxxxx37", - "openId": null, - "accessCode": null, - "unionId": null, - "scope": null, - "tokenType": null, - "idToken": null, - "macAlgorithm": null, - "macKey": null, - "code": null, - "oauthToken": null, - "oauthTokenSecret": null, - "userId": null, - "screenName": null, - "oauthCallbackConfirmed": null - } - } -} -``` \ No newline at end of file diff --git a/docs/oauth/aliyun.md b/docs/oauth/aliyun.md deleted file mode 100644 index a4929ea55775cba55ef1446d0030b019759bbbf3..0000000000000000000000000000000000000000 --- a/docs/oauth/aliyun.md +++ /dev/null @@ -1,181 +0,0 @@ -## 1. 授权流程 -![](../_media/oauth/7bc9ea47.png) -1. 用户通过浏览器登录Web应用。 -2. Web应用重定向到阿里云OAuth 2.0服务并将URL返回给浏览器。 -注:如果用户还未登录,则会进一步重定向到阿里云登录服务。 -3. 用户通过浏览器登录阿里云OAuth 2.0服务并申请授权码。 -4. 阿里云OAuth 2.0服务重定向到Web应用并返回授权码给浏览器。 -5. 浏览器通过Web应用使用授权码向阿里云OAuth 2.0服务申请代表用户身份的令牌。 -6. 阿里云OAuth 2.0服务向Web应用返回令牌。 -7. Web应用通过获取的令牌向阿里云发起访问API的请求。 - -## 2. 配置应用 - -### 2.1 创建应用 - -1. 云账号登录[RAM控制台](https://ram.console.aliyun.com/?spm=a2c4g.11186623.2.8.46a779b5dxuzTy)。 -2. 在左侧导航栏,单击OAuth应用管理。 -3. 单击创建应用。 -4. 输入应用名称和应用显示名称。 -5. 选择应用类型。(这儿选择 WebApp 即可) - - WebApp: 指基于浏览器交互的网络应用。 - - NativeApp:指操作系统中运行的本地应用,主要为运行在桌面操作系统或移动操作系统中的应用。 - - ServerApp:指直接访问阿里云服务,而无需依赖用户登录的应用,目前仅支持基于SCIM协议的用户同步应用。示例请参见[通过SCIM协议将企业内部账号同步到阿里云RAM](https://help.aliyun.com/document_detail/162674.html?spm=a2c4g.11186623.2.9.46a779b5dxuzTy#task-2471389)。 -6. 根据需要修改访问令牌有效期时长。 -注:有效期可设置范围为:15分钟至3小时,默认为3600秒。 -7. 根据需要修改刷新令牌有效期时长。 -注:有效期可设置范围为:2小时至1年,默认为2592000秒。 -8. 输入回调地址。![](../_media/oauth/4f3da199.png) -9. 单击确定完成应用创建。 - -### 2.2 配置应用 OAuth 范围 - -![](../_media/oauth/f44fb011.png) - -如上,除了默认的 openid 外,再单独增加两条 scope: -- aliuid:阿里云颁发的唯一用户标志符 -- profile:用户的名称等个人信息 - -scope 对应获取的用户信息关系表如下: - -![](../_media/oauth/673628f8.png) - -### 2.3 配置密钥 - -应用创建完成后,进入应用详情: - -![](../_media/oauth/2055a056.png) - -切换到 “应用密钥” 选项页,创建密钥 - -![](../_media/oauth/930e0825.png) - -注:密钥创建完成后记得要保存,因为密钥只能在创建完成后明文显示一次,如丢失或者忘记,请重新创建。 - -## 3. 集成JustAuth - - -### 2.1 引入依赖 - -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -`${latest.version}`表示当前最新的版本,可以在[这儿](https://github.com/justauth/JustAuth/releases)获取最新的版本信息。 - -### 2.2 创建Request - -```java -AuthRequest authRequest = new AuthAliyunRequest(AuthConfig.builder() - .clientId("APPID") - .clientSecret("应用私钥") - .alipayPublicKey("支付宝公钥") - .redirectUri("https://www.zhyd.me/oauth/callback/alipay") - .build()); -``` - -### 2.3 生成授权地址 - -我们可以直接使用以下方式生成第三方平台的授权链接: -```java -String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); -``` -这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到iframe中,适配网站设计。 - - -### 2.4 以上完整代码如下 - -```java -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.request.AuthAliyunRequest; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -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") - public void renderAuth(HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(); - response.sendRedirect(authRequest.authorize(AuthStateUtils.createState())); - } - - @RequestMapping("/callback") - public Object login(AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(); - return authRequest.login(callback); - } - - private AuthRequest getAuthRequest() { - return new AuthAliyunRequest(AuthConfig.builder() - .clientId("APPID") - .clientSecret("应用私钥") - .redirectUri("回调地址") - .build()); - } -} -``` - -## 3. 授权结果 - -```json -{ - "code": 2000, - "msg": null, - "data": { - "uuid": "lmwxxxw==", - "username": "yadong.zhang0415@gmail.com", - "nickname": "root", - "avatar": null, - "blog": null, - "company": null, - "location": null, - "email": null, - "remark": null, - "gender": "UNKNOWN", - "source": "ALIYUN", - "token": { - "accessToken": "xxxx", - "expireIn": 3599, - "refreshToken": null, - "uid": null, - "openId": null, - "accessCode": null, - "unionId": null, - "scope": null, - "tokenType": "Bearer", - "idToken": "xxxxx", - "macAlgorithm": null, - "macKey": null, - "code": null, - "oauthToken": null, - "oauthTokenSecret": null, - "userId": null, - "screenName": null, - "oauthCallbackConfirmed": null - }, - "rawUserInfo": { - "sub": "lmwtxxxZ9ezw==", - "uid": "193xxx", - "login_name": "yadong.zhang0415@gmail.com", - "requestid": "544effc2-f7ba-4ac7-8af4-da2739e50e04", - "name": "root", - "bid": "2xxx42", - "aid": "193xxx" - } - } -} -``` \ No newline at end of file diff --git a/docs/oauth/coding.md b/docs/oauth/coding.md deleted file mode 100644 index 4b096ca06b4d7cf7c34b8f18a0ac6a826d9da2ec..0000000000000000000000000000000000000000 --- a/docs/oauth/coding.md +++ /dev/null @@ -1,151 +0,0 @@ -## 1. 申请应用 - -## 创建 CODING 应用 -1. 点击【个人设置】->【开放生态】->【创建应用】,注册需要接入 CODING 的应用。 - -![](../_media/oauth/7fded4b4.png) - -2. 在创建应用页面,填写接入的应用信息: - -- 应用名称、应用主页及回调地址为必填项; -- 其中回调地址是用户授权后,CODING 回调到应用,并且回传授权码的地址; -- 如果没有上传图标将自动生成应用图标。 - -填写完毕后,点击【创建应用】。 - -![](../_media/oauth/ca78b40f.png) - -注意:回调地址不支持 `127.0.0.1`、`localhost` 等配置 - -3. 应用创建完成后,在应用详情页,会生成 Client ID 和 Client Secret ,保存以便后续认证使用。 - -![](../_media/oauth/ac549f1a.png) - -## 2. 集成JustAuth - -### 2.1 引入依赖 - -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -`${latest.version}`表示当前最新的版本,可以在[这儿](https://github.com/justauth/JustAuth/releases)获取最新的版本信息。 - -### 2.2 创建Request - -```java -AuthRequest authRequest = new AuthTencentCloudRequest(AuthConfig.builder() - .clientId("App Key") - .clientSecret("App Secret") - .redirectUri("授权回调页") - .build()); -``` - -### 2.3 生成授权地址 - -我们可以直接使用以下方式生成第三方平台的授权链接: -```java -String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); -``` -这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到iframe中,适配网站设计。 - - -### 2.4 以上完整代码如下 - -```java -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.request.AuthCodingRequest; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.model.AuthToken; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -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") - public void renderAuth(HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(); - response.sendRedirect(authRequest.authorize(AuthStateUtils.createState())); - } - - @RequestMapping("/callback") - public Object login(AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(); - return authRequest.login(callback); - } - - @RequestMapping("/revoke/{token}") - public Object revokeAuth(@PathVariable("token") String token) throws IOException { - AuthRequest authRequest = getAuthRequest(); - return authRequest.revoke(AuthToken.builder().accessToken(token).build()); - } - - private AuthRequest getAuthRequest() { - return new AuthCodingRequest(AuthConfig.builder() - .clientId("App Key") - .clientSecret("App Secret") - .redirectUri("授权回调页") - // 比如以“ https://justauth.coding.net/ ”为例,codingGroupName = justauth - .codingGroupName("团队名") - .build()); - } -} -``` -授权链接访问成功后会看到以下页面内容: - -![](../_media/oauth/2f1b9c2c.png) - -## 3. 授权结果 - -```json -{ - "code": 2000, - "msg": null, - "data": { - "uuid": "xxx", - "username": "yadong.zhang", - "nickname": "yadong.zhang", - "avatar": "https://coding.net/static/fruit_avatar/Fruit-6.png", - "blog": "https://coding.net/u/HNMxPTOFRd", - "company": "", - "location": "", - "email": null, - "remark": "", - "gender": "FEMALE", - "source": "CODING", - "token": { - "accessToken": "xx", - "expireIn": 858292, - "refreshToken": "xx", - "uid": null, - "openId": null, - "accessCode": null, - "unionId": null, - "scope": null, - "tokenType": null, - "idToken": null, - "macAlgorithm": null, - "macKey": null, - "code": null, - "oauthToken": null, - "oauthTokenSecret": null, - "userId": null, - "screenName": null, - "oauthCallbackConfirmed": null - } - } -} -``` \ No newline at end of file diff --git a/docs/oauth/csdn.md b/docs/oauth/csdn.md deleted file mode 100644 index ef9ba4041a7c11d8bb88498bc39f776104a0dd21..0000000000000000000000000000000000000000 --- a/docs/oauth/csdn.md +++ /dev/null @@ -1 +0,0 @@ -_请知悉:经咨询CSDN官方客服得知,CSDN的授权开放平台已经下线。如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了_ \ No newline at end of file diff --git a/docs/oauth/gitee.md b/docs/oauth/gitee.md deleted file mode 100644 index ef430d768614ffd0b6e8f5454f71d0962a68835e..0000000000000000000000000000000000000000 --- a/docs/oauth/gitee.md +++ /dev/null @@ -1,146 +0,0 @@ -## 1. 申请应用 - -### 1.1 注册账号 - -注册Gitee账号:[https://gitee.com](https://gitee.com)。如果已有则忽略该步骤,直接进入第二步。 - -### 1.2 创建第三方授权应用 - -进入第三方应用页面([https://gitee.com/oauth/applications](https://gitee.com/oauth/applications)) - -![Gitee第三方应用管理页面](../_media/oauth/gitee_02.png) - -创建应用 - -![创建OAuth应用](../_media/oauth/gitee_03.png) - -- **应用名称** 一般填写自己的网站名称即可 -- **应用描述** 一般填写自己的应用描述即可 -- **应用主页** 填写自己的网站首页地址 -- **应用回调地址** 重点,该地址为用户授权后需要跳转到的自己网站的地址,默认携带一个code参数 -- **权限** 根据页面提示操作,默认勾选第一个就行。 - -以上信息输入完成后,点击确定按钮创建应用。创建完成后,点击进入应用详情页,可以看到应用的密钥等信息 - -![应用详情](../_media/oauth/gitee_04.png) - -记录以下三个信息:`Client ID`、`Client Secret`和`应用回调地址`,后面我们会用到 - - -## 2. 集成JustAuth - -### 2.1 引入依赖 - -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -`${latest.version}`表示当前最新的版本,可以在[这儿](https://github.com/justauth/JustAuth/releases)获取最新的版本信息。 - -### 2.2 创建Request - -```java -AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder() - .clientId("Client ID") - .clientSecret("Client Secret") - .redirectUri("应用回调地址") - .build()); -``` - -### 2.3 生成授权地址 - -我们可以直接使用以下方式生成第三方平台的授权链接: -```java -String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); -``` -这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到iframe中,适配网站设计。 - - -### 2.4 以上完整代码如下 - -```java -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.request.AuthGiteeRequest; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -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") - public void renderAuth(HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(); - response.sendRedirect(authRequest.authorize(AuthStateUtils.createState())); - } - - @RequestMapping("/callback") - public Object login(AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(); - return authRequest.login(callback); - } - - private AuthRequest getAuthRequest() { - return new AuthGiteeRequest(AuthConfig.builder() - .clientId("Client ID") - .clientSecret("Client Secret") - .redirectUri("应用回调地址") - .build()); - } -} -``` -授权链接访问成功后会看到以下页面内容: -![授权登录](../_media/oauth/gitee_01.png) - -点击同意授权即可完成gitee的oauth登录。 - -## 3. 授权结果 - -注:数据已脱敏 - -```json -{ - "code": 2000, - "msg": null, - "data": { - "uuid": "xxx", - "username": "yadong.zhang", - "nickname": "yadong.zhang", - "avatar": "https://avatar.gitee.com/uploads/99/784199_yadong.zhang.png?1462325358", - "blog": "https://www.zhyd.me", - "company": null, - "location": null, - "email": null, - "remark": "程序员", - "gender": "UNKNOWN", - "source": "GITEE", - "token": { - "accessToken": "630740bxxxxxxxx4", - "expireIn": 86400, - "refreshToken": "1f2e0faedxxxxx537ec8", - "uid": null, - "openId": null, - "accessCode": null, - "unionId": null, - "scope": "user_info", - "tokenType": "bearer", - "idToken": null, - "macAlgorithm": null, - "macKey": null, - "code": null - } - } -} -``` diff --git a/docs/oauth/github.md b/docs/oauth/github.md deleted file mode 100644 index 5695d246fedfed172f62cde4ffed710ea91b79da..0000000000000000000000000000000000000000 --- a/docs/oauth/github.md +++ /dev/null @@ -1,145 +0,0 @@ -## 1. 申请应用 - -### 1.注册Github账号 -https://github.com/。如果已有则忽略该步骤,直接进入第二步。 -### 2.创建第三方应用 -进入通过右上角进入个人设置页:https://github.com/settings/profile -![file](../_media/oauth/github_01.png) -然后进入第三方应用页面:https://github.com/settings/developers -![file](../_media/oauth/github_02.png) - -在应用管理页面,选择`OAuth App`,然后点击右上方的`New OAuth App`按钮进入新建应用页面 - -![file](../_media/oauth/github_03.png) - -`Application name` 一般填写自己的网站名称即可 -`Application description` 一般填写自己的应用描述即可 -`Homepage URL` 填写自己的网站首页地址 -`Authorization callback URL` **重点**,该地址为用户授权后需要跳转到的自己网站的地址,默认携带一个`code`参数 - -以上信息输入完成后,点击下方绿色的`Register applaction`按钮创建应用。创建完成后,点击进入应用详情页,可以看到应用的密钥等信息 - -![file](../_media/oauth/github_04.png) - -copy以下三个信息:`Client ID`、`Client Secret`和`Authorization callback URL`。 - -## 2. 集成JustAuth - - -### 2.1 引入依赖 - -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -`${latest.version}`表示当前最新的版本,可以在[这儿](https://github.com/justauth/JustAuth/releases)获取最新的版本信息。 - -### 2.2 创建Request - -```java -AuthRequest authRequest = new AuthGithubRequest(AuthConfig.builder() - .clientId("Client ID") - .clientSecret("Client Secret") - .redirectUri("应用回调地址") - .build()); -``` - -### 2.3 生成授权地址 - -我们可以直接使用以下方式生成第三方平台的授权链接: -```java -String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); -``` -这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到iframe中,适配网站设计。 - - -### 2.4 以上完整代码如下 - -```java -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.request.AuthGithubRequest; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -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") - public void renderAuth(HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(); - response.sendRedirect(authRequest.authorize(AuthStateUtils.createState())); - } - - @RequestMapping("/callback") - public Object login(AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(); - return authRequest.login(callback); - } - - private AuthRequest getAuthRequest() { - return new AuthGithubRequest(AuthConfig.builder() - .clientId("Client ID") - .clientSecret("Client Secret") - .redirectUri("应用回调地址") - .build()); - } -} -``` -授权链接访问成功后会看到以下页面内容: -![授权登录](../_media/oauth/github_05.png) - -输入账号密码登录完成后将会进入授权页面 - -![授权登录](../_media/oauth/github_06.png) - -点击同意授权即可完成github的oauth登录。 - -## 3. 授权结果 - -```json -{ - "code": 2000, - "msg": null, - "data": { - "uuid": "xxx", - "username": "zhangyd-c", - "nickname": "yadong.zhang", - "avatar": "https://avatars3.githubusercontent.com/u/12689082?v=4", - "blog": "https://www.zhyd.me", - "company": "", - "location": "Beijing", - "email": "yadong.zhang0415@gmail.com", - "remark": "心之所向,无所不能", - "gender": "UNKNOWN", - "source": "GITHUB", - "token": { - "accessToken": "6bb4228efdxxxxxx578148e3", - "expireIn": 0, - "refreshToken": null, - "uid": null, - "openId": null, - "accessCode": null, - "unionId": null, - "scope": null, - "tokenType": "bearer", - "idToken": null, - "macAlgorithm": null, - "macKey": null, - "code": null - } - } -} -``` \ No newline at end of file diff --git a/docs/oauth/kujiale.md b/docs/oauth/kujiale.md deleted file mode 100644 index f3e8dfc60902030ac7f74c05dad7c914194560ee..0000000000000000000000000000000000000000 --- a/docs/oauth/kujiale.md +++ /dev/null @@ -1,162 +0,0 @@ -## 1. 申请应用 -企业可通过两种途径申请应用,一、直接通过线下商务合作,由商务人员线下提供开通的对应应用的秘钥信息。二、线上自助申请(此步骤申请的应用可以在应用审核上线后出现在商家后台的应用市场内)。此步骤主要介绍线上自助申请的流程,若以获取到对应的秘钥信息,则直接进入步骤2. -注意:目前酷家乐的开放平台只针对合作企业开放,暂时不对个人开发者开放。商务合作或酷家乐应用市场相关信息可访问[https://www.kujiale.com/](酷家乐首页)通过首页上的在线客服咨询。 -### 1.1 注册账号 -注册酷家乐账号:[https://www.kujiale.com/](https://www.kujiale.com/)。如果已有则忽略该步骤,直接进入第二步。(一般建议直接使用企业账号) -### 1.2 认证开发者 -进入酷家乐开放平台([https://open.kujiale.com/](https://open.kujiale.com/))点击右上角的管理中心进入第三方应用管理页面。 -![酷家乐第三方应用管理中心](../_media/oauth/kujiale_1.png) -首次进入左侧菜单栏的-服务入驻申请模块,系统会要求进行开发者实名认证。 -![实名认证](../_media/oauth/kujiale_2.png) -根据实名认证的流程,开发者需要依次提供:1.开发者信息,2.开发者企业信息,3.开发者企业人员构成信息,4.开发者企业经验背景信息 -![实名认证流程](../_media/oauth/kujiale_3.png) -在2-3个工作日内,酷家乐运营同学会对提交信息进行审核,审核通过后可进入应用申请。 -ps:如果有商务同学跟进的话可以联系商务同学提速,基本在1小时内能得到响应。 -### 1.2 创建第三方授权应用 -进入服务入驻申请模块([https://open.kujiale.com/open/management/service-application](服务入驻申请)),申请应用服务。 -![创建应用信息](../_media/oauth/kujiale_4.png) -选择服务类型以后提供相应的应用信息申请应用。 -![创建应用信息](../_media/oauth/kujiale_5.png) -oauth2.0基础信息 -- **应用名称** 一般填写自己的网站名称即可 -- **应用简介** 填写应用描述,预期实现的功能场景。 -- **应用回调地址** 重点,该地址为用户授权后需要跳转到的自己网站的地址,默认携带一个code参数 -- **OAuth申请** 根据申请应用的具体业务场景而定,获取账号基本信息为其他权限(可申请用户授权资源项)申请的基础,即获取账号基本信息必选。若只是依托于酷家乐账号登录则只选择获取账号基本信息即可。 -应用市场基础信息(当前只提供应用市场申请能力;应用市场的具体的营销规则,合作模式以及营销分成规则可通过在线客服与我们的商务同学取得联系。) -- **应用图标** 应用图标是应用展示在酷家乐应用市场内的图片表示,一般可以提供商家的品牌logo -- **购买通知地址** 当应用在应用市场内由其他商家付钱触发购买行为,酷家乐会通过此接口向第三方推送购买通知。 -联系信息 -- **咨询电话** 第三方需要为自己在酷家乐应用市场内的应用提供客户咨询能力。 -- **客服链接** 第三方需要为自己在酷家乐应用市场内的应用提供客服支持。 -- **开发者邮箱** 应用负责人联系邮箱,用于推送相关应用信息,例如:应用状态,应用服务情况,应用数据统计情况,以及相关的酷家乐接口迭代推送。 -- **开发者电话** 应用负责人联系人电话,帮助在系统层面出现问题时候可以快速联系到负责人。 -协议信息 -- **应用协议名称** 应用的使用者需要知晓并且同意的协议名称。 -- **应用协议内容** 应用的使用者需要知晓并且同意才可以使用购买该应用的协议内容。 - -保存并提交审核后,由运营在管理后台审核应用的相关信息以及应用申请相关权限的合理性。在审核通过后,可以在应用服务模块中查看到该应用,同时访问应用详情可以获取到此应用的秘钥信息(client_id:应用的唯一标识。client_secret:client_id对应的密钥,访问用户资源时用来验证应用的合法性。) - -## 2. 集成JustAuth - -### 2.1 引入依赖 - -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -`${latest.version}`表示当前最新的版本,可以在[这儿](https://github.com/justauth/JustAuth/releases)获取最新的版本信息。 - -### 2.2 创建Request - -```java -AuthRequest authRequest = new AuthKujialeRequest(AuthConfig.builder() - .clientId("Client ID") - .clientSecret("Client Secret") - .redirectUri("应用回调地址") - .build()); -``` - -### 2.3 生成授权地址 - -我们可以直接使用以下方式生成第三方平台的授权链接: -```java -String authorizeUrl = authRequest.authorize(String state); -``` -这个授权链接,默认的是`get_user_info`scope,即只想用户申请用户基本信息的授权,如果想自定义`scope`可以使用如下方式,单独传入对应的`scope`即可 -```java -String authorizeUrl = authRequest.authorize(String state, String scopeStr); -``` -这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到iframe中,适配网站设计。 - -参数说明: -- state:用于防范CSRF攻击,各第三方可以视自己网站的安全性而定(建议预先了解一下oauth2.0的技术以及state参数的意义) -- scopeStr:酷家乐授权选项scope,以逗号隔开,具体资源可以参考每个[https://open.kujiale.com/open/apps?app_id=2](酷家乐开放接口文档)内的授权scope内容。 - -### 2.4 以上完整代码如下 - -```java -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.request.AuthKujialeRequest; -import me.zhyd.oauth.model.AuthCallback; -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") - public void renderAuth(HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(); - response.sendRedirect(authRequest.authorize("state")); - } - - @RequestMapping("/callback") - public Object login(AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(); - //此处如果对安全性有要求,请校验state参数 - return authRequest.login(callback); - } - - private AuthRequest getAuthRequest() { - return new AuthKujialeRequest(AuthConfig.builder() - .clientId("Client ID") - .clientSecret("Client Secret") - .redirectUri("应用回调地址") - .build()); - } -} -``` -授权链接访问成功后会看到以下页面内容: -![授权登录](../_media/oauth/kujiale_6.png) - -点击同意授权即可完成酷家乐的oauth登录。 - -## 3. 授权结果 - -注:数据已脱敏 - -```json -{ - "code": 2000, - "msg": null, - "data": { - "uuid": "xxx", - "username": "yadong.zhang", - "nickname": "yadong.zhang", - "avatar": "https://qhyxpicoss.kujiale.com/avatars/2017/03/03/origin8762512743744383438.jpg", - "blog": null, - "company": null, - "location": null, - "email": null, - "remark": null, - "gender": null, - "source": "KUJIALE", - "token": { - "accessToken": "630740bxxxxxxxx4", - "expireIn": 86400, - "refreshToken": "1f2e0faedxxxxx537ec8", - "uid": null, - "openId": null, - "accessCode": null, - "unionId": null, - "scope": null, - "tokenType": null, - "idToken": null, - "macAlgorithm": null, - "macKey": null, - "code": null - } - } -} -``` \ No newline at end of file diff --git a/docs/oauth/qq.md b/docs/oauth/qq.md deleted file mode 100644 index 892c96598527e02140d9b7ec5ed80d8c0224a3a9..0000000000000000000000000000000000000000 --- a/docs/oauth/qq.md +++ /dev/null @@ -1,97 +0,0 @@ -## 1. 申请应用 - -### 1.登录QQ互联平台 -https://connect.qq.com/ -### 2.申请开发者 -进入“应用管理”页面:[https://connect.qq.com/manage.html#/](https://connect.qq.com/manage.html#/) -如果是第一次使用,并且未进行过开发者认证,需要提交一下个人资料,待认证通过后方可创建应用。 - -### 3. 添加应用 - -依次点击:应用管理 -> 网站应用 -> 创建应用,应用信息提交后,等待审核通过即可 - -应用审核通过后如下: - -![file](../_media/oauth/qq_01.png) - -copy以下三个信息:`App ID`、`App Key`和`网站回调域`。 - -## 2. 集成JustAuth - - -### 2.1 引入依赖 - -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -`${latest.version}`表示当前最新的版本,可以在[这儿](https://github.com/justauth/JustAuth/releases)获取最新的版本信息。 - -### 2.2 创建Request - -```java -AuthRequest authRequest = new AuthQqRequest(AuthConfig.builder() - .clientId("App ID") - .clientSecret("App Key") - .redirectUri("网站回调域") - .build()); -``` - -### 2.3 生成授权地址 - -我们可以直接使用以下方式生成第三方平台的授权链接: -```java -String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); -``` -这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到iframe中,适配网站设计。 - - -### 2.4 以上完整代码如下 - -```java -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.request.AuthQqRequest; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -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") - public void renderAuth(HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(); - response.sendRedirect(authRequest.authorize(AuthStateUtils.createState())); - } - - @RequestMapping("/callback") - public Object login(AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(); - return authRequest.login(callback); - } - - private AuthRequest getAuthRequest() { - return new AuthQqRequest(AuthConfig.builder() - .clientId("App ID") - .clientSecret("App Key") - .redirectUri("网站回调域") - .build()); - } -} -``` - -## 3. 授权结果 - -暂无 \ No newline at end of file diff --git a/docs/oauth/twitter.md b/docs/oauth/twitter.md deleted file mode 100644 index 31a2d6e86ef54a33f4792984d37e534ba4d95d90..0000000000000000000000000000000000000000 --- a/docs/oauth/twitter.md +++ /dev/null @@ -1,104 +0,0 @@ -## 1. 申请应用 - -参考文章:[twitter三方登录的实现](https://my.oschina.net/u/3361217/blog/1438877),只需关注创建应用部分即可。 - -copy以下三个信息:`App ID`、`App Key`和`网站回调域`。 - -> 友情提示:twitter现不支持个人用户创建应用 - -## 2. 集成JustAuth - - -### 2.1 引入依赖 - -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -`${latest.version}`表示当前最新的版本,可以在[这儿](https://github.com/justauth/JustAuth/releases)获取最新的版本信息。 - -### 2.2 创建Request - -```java -// 国外平台 目前必须要手动配置代理 -System.setProperty("proxyPort", "10080"); -System.setProperty("proxyHost", "127.0.0.1"); -AuthRequest authRequest = new AuthTwitterRequest(AuthConfig.builder() - .clientId("App ID") - .clientSecret("App Key") - .redirectUri("网站回调域") - .build()); -``` - -> 特别注意:所有国外平台都无法直接通过java进行访问API,目前[simple-http](https://github.com/xkcoding/simple-http) Release版本,暂不支持添加代理,所以目前需要手动开启代理。 - -代理开启的方式: -```java -System.setProperty("proxyPort", "10080"); -System.setProperty("proxyHost", "127.0.0.1"); -``` -以上代码可以在声明 `AuthRequest` 时创建,也可以全局执行。 - -本地如果支持科学上网,就用自己本地的代理端口即可,如果不支持科学上网,可以去网上找一些免费的代理IP进行测试(请自行操作)。 - -### 2.3 生成授权地址 - -我们可以直接使用以下方式生成第三方平台的授权链接: -```java -String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); -``` -这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到iframe中,适配网站设计。 - - -### 2.4 以上完整代码如下 - -```java -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.request.AuthTwitterRequest; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -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") - public void renderAuth(HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(); - response.sendRedirect(authRequest.authorize(AuthStateUtils.createState())); - } - - @RequestMapping("/callback") - public Object login(AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(); - return authRequest.login(callback); - } - - private AuthRequest getAuthRequest() { - // 国外平台 目前必须要手动配置代理 - System.setProperty("proxyPort", "10080"); - System.setProperty("proxyHost", "127.0.0.1"); - return new AuthTwitterRequest(AuthConfig.builder() - .clientId("App ID") - .clientSecret("App Key") - .redirectUri("网站回调域") - .build()); - } -} -``` - -## 3. 授权结果 - -暂无 \ No newline at end of file diff --git a/docs/oauth/wechat_open.md b/docs/oauth/wechat_open.md deleted file mode 100644 index 18283b1fe042ee004b64e2a048b99033a878ffcc..0000000000000000000000000000000000000000 --- a/docs/oauth/wechat_open.md +++ /dev/null @@ -1,168 +0,0 @@ -### 声明: -此文档适用于**微信开放平台**! - -## 1. 申请应用 - -### 1.注册微信开放平台账号 -[https://open.weixin.qq.com/](https://open.weixin.qq.com/)。如果已有则忽略该步骤,直接进入第二步。 -### 2. 申请开发者资质认证 - -这儿需要重点说明的是, 微信开放平台创建应用,需要申请**开发者资质认证** - -![file](../_media/oauth/wechat_01.png) - -如上图:账号中心->开发者资质认证 - -但是微信**不支持**个人开发者认证,必须要企业信息才能提交认证。 - -对于个人开发者来说,我们提供三种解决方案: -- 用自己公司的信息做认证(请确保合法合规) -- 找朋友帮忙认证 -- 去TB或者其他平台花钱找人认证,这种方式一般支持:短期租、长期认证 - -### 3.创建第三方应用 - -认证通过后切换到“网站应用”标签页,点击“创建网站应用”按钮 -![file](../_media/oauth/wechat_02.png) - - -![file](../_media/oauth/wechat_03.png) - -创建完成后,就能在“网站应用”列表中看到相关信息 - -![file](../_media/oauth/wechat_04.png) - -点击“查看”进入应用详情,可以看到 “OAuth三大件”:`Client ID`、`Client Secret`和`Callback URL`。 - -![file](../_media/oauth/wechat_05.png) - -**注意:** -- “授权回调域”填写对应域名即可。比如我想给我的博客 [https://www.zhyd.me](https://www.zhyd.me) 增加微信第三方登录,那么我在配回调地址时,就只需要填写 `www.zhyd.me`即可,实际我们自己开发程序时, 可以随便配置具体的回调地址,只要确保是在 `www.zhyd.me` 下的地址就行。本例中, 我在程序中配置的回调地址为:`https://www.zhyd.me/oauth/callback/wechat` -- 重要的事情说三遍:**一定要确保应用详情页的“接口信息”中的“微信登录”接口的状态为“已获得”!** **一定要确保应用详情页的“接口信息”中的“微信登录”接口的状态为“已获得”!** **一定要确保应用详情页的“接口信息”中的“微信登录”接口的状态为“已获得”!**否则一定会遇到这个问题:[“Scope参数错误或者Scope没有权限”是怎么回事?](../Q&A.md?id=_7scope参数错误或者scope没有权限是怎么回事?) - - -## 2. 集成JustAuth - - -### 2.1 引入依赖 - -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -`${latest.version}`表示当前最新的版本,可以在[这儿](https://github.com/justauth/JustAuth/releases)获取最新的版本信息。 - -### 2.2 创建Request - -```java -AuthRequest authRequest = new AuthWeChatRequest(AuthConfig.builder() - .clientId("Client ID") - .clientSecret("Client Secret") - .redirectUri("https://www.zhyd.me/oauth/callback/wechat") - .build()); -``` - -### 2.3 生成授权地址 - -我们可以直接使用以下方式生成第三方平台的授权链接: -```java -String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); -``` -这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到iframe中,适配网站设计。 - - -### 2.4 以上完整代码如下 - -```java -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.request.AuthWeChatOpenRequest; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -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") - public void renderAuth(HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(); - response.sendRedirect(authRequest.authorize(AuthStateUtils.createState())); - } - - @RequestMapping("/callback") - public Object login(AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(); - return authRequest.login(callback); - } - - private AuthRequest getAuthRequest() { - return new AuthWeChatOpenRequest(AuthConfig.builder() - .clientId("Client ID") - .clientSecret("Client Secret") - .redirectUri("https://www.zhyd.me/oauth/callback/wechat") - .build()); - } -} -``` -授权链接访问成功后会看到以下页面内容: -![file](../_media/oauth/wechat_06.png) - -使用手机扫码后,将会进入确认授权页面 - -![file](../_media/oauth/wechat_07.png) - -点击同意授权即可完成微信的oauth登录。 - -## 3. 授权结果 - -```json -{ - "code": 2000, - "msg": null, - "data": { - "uuid": "xxxxxxx", - "username": "RD", - "nickname": "RD", - "avatar": "http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83ereNicKErbtBVnraCnzjGia2ZWPSkI9Ok4ScrmkdiacgPN6D5qeYBf3iba2lXknE7YaMMHHRrMW6Op8eQ/132", - "blog": null, - "company": null, - "location": "中国-北京-", - "email": null, - "remark": null, - "gender": "MALE", - "source": "WECHAT_OPEN", - "token": { - "accessToken": "28_Bzvt4UxxxxFElOxxxxgTqIJmSE5LxB2Az7stFqYVnFoIhL7RbevA0Urc", - "expireIn": 7200, - "refreshToken": "28_vtarjUxxxxfKh0Axxxxe_vy7E62hAYkMJ5M_JT4gMXM7r1kT_SeKAQz8Ojow", - "uid": null, - "openId": "xxxxxxx", - "accessCode": null, - "unionId": "xxxxxxx", - "scope": null, - "tokenType": null, - "idToken": null, - "macAlgorithm": null, - "macKey": null, - "code": null, - "oauthToken": null, - "oauthTokenSecret": null, - "userId": null, - "screenName": null, - "oauthCallbackConfirmed": null - } - } -} -``` \ No newline at end of file diff --git a/docs/oauth/weibo.md b/docs/oauth/weibo.md deleted file mode 100644 index 141f3df7d7b3a102197e91c096de2dc07ad7f88b..0000000000000000000000000000000000000000 --- a/docs/oauth/weibo.md +++ /dev/null @@ -1,155 +0,0 @@ -## 1. 申请应用 - -### 1.注册微博开放平台账号 -https://open.weibo.com/apps。如果已有则忽略该步骤,直接进入第二步。 -### 2.创建应用 -通过顶部菜单栏的【微连接-网站接入】或者直接点击【[网站接入](https://open.weibo.com/connect)】进入网站接入界面 - -![file](../_media/oauth/weibo_01.png) - -点击【立即接入】按钮进入创建应用页面,填入**应用名称**,**应用分类**选择默认的“网页应用”即可 - -![file](../_media/oauth/weibo_02.png) - -创建完成后会自动跳转到应用信息页面,如下图,根据提示完善应用即可 - -![file](../_media/oauth/weibo_03.png) - -注:全部填写完成后,需要提交审核。 - -提交审核完成后,将Oauth需要用到的数据copy下来(下面截图取自我已经审核通过的应用): - -![file](../_media/oauth/weibo_04.png) - -![file](../_media/oauth/weibo_05.png) - -微博平台的OAuth支持revoke操作,所以会有一个【取消授权回调页】配置。 - -## 2. 集成JustAuth - - -### 2.1 引入依赖 - -```xml - - me.zhyd.oauth - JustAuth - ${latest.version} - -``` - -`${latest.version}`表示当前最新的版本,可以在[这儿](https://github.com/justauth/JustAuth/releases)获取最新的版本信息。 - -### 2.2 创建Request - -```java -AuthRequest authRequest = new AuthWeiboRequest(AuthConfig.builder() - .clientId("App Key") - .clientSecret("App Secret") - .redirectUri("授权回调页") - .build()); -``` - -### 2.3 生成授权地址 - -我们可以直接使用以下方式生成第三方平台的授权链接: -```java -String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); -``` -这个链接我们可以直接后台重定向跳转,也可以返回到前端后,前端控制跳转。前端控制的好处就是,可以将第三方的授权页嵌入到iframe中,适配网站设计。 - - -### 2.4 以上完整代码如下 - -```java -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.request.AuthWeiboRequest; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.model.AuthToken; -import me.zhyd.oauth.request.AuthRequest; -import me.zhyd.oauth.utils.AuthStateUtils; -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") - public void renderAuth(HttpServletResponse response) throws IOException { - AuthRequest authRequest = getAuthRequest(); - response.sendRedirect(authRequest.authorize(AuthStateUtils.createState())); - } - - @RequestMapping("/callback") - public Object login(AuthCallback callback) { - AuthRequest authRequest = getAuthRequest(); - return authRequest.login(callback); - } - - @RequestMapping("/revoke/{token}") - public Object revokeAuth(@PathVariable("token") String token) throws IOException { - AuthRequest authRequest = getAuthRequest(); - return authRequest.revoke(AuthToken.builder().accessToken(token).build()); - } - - private AuthRequest getAuthRequest() { - return new AuthWeiboRequest(AuthConfig.builder() - .clientId("App Key") - .clientSecret("App Secret") - .redirectUri("授权回调页") - .build()); - } -} -``` -授权链接访问成功后会看到以下页面内容: -![授权登录](../_media/oauth/weibo_06.png) - -网页登录或者手机扫码登录并授权第三方应用的登录请求后,将会获取到用户的信息 - -## 3. 授权结果 - -```json -{ - "code": 2000, - "msg": null, - "data": { - "uuid": "xxxxxxx", - "username": "七彩狼丿", - "nickname": "七彩狼丿", - "avatar": "https://tva3.sinaimg.cn/crop.0.0.1424.1424.50/649b9a6fjw8ezwz4inarqj213k13kwjh.jpg?KID=imgbed,tva&Expires=1577025808&ssig=Q7m4jDuwUt", - "blog": "https://www.zhyd.me", - "company": null, - "location": "北京 朝阳区", - "email": null, - "remark": "长大了,不得不接受一些事实", - "gender": "MALE", - "source": "WEIBO", - "token": { - "accessToken": "2.xxxxxCNUC", - "expireIn": 157679999, - "refreshToken": null, - "uid": "xxxxxxx", - "openId": "xxxxxxx", - "accessCode": null, - "unionId": null, - "scope": null, - "tokenType": null, - "idToken": null, - "macAlgorithm": null, - "macKey": null, - "code": null, - "oauthToken": null, - "oauthTokenSecret": null, - "userId": null, - "screenName": null, - "oauthCallbackConfirmed": null - } - } -} -``` \ No newline at end of file diff --git a/docs/references.md b/docs/references.md deleted file mode 100644 index 1cb33483d178a2874158e94739e516c10e242709..0000000000000000000000000000000000000000 --- a/docs/references.md +++ /dev/null @@ -1,47 +0,0 @@ -## OAuth 文档 - -关于OAuth2相关的内容、原理可以自行参阅以下资料: - -- [The OAuth 2.0 Authorization Framework](https://tools.ietf.org/html/rfc6749) -- [OAuth 2.0](https://oauth.net/2/) - -## 第三方平台的API文档 - -- Gitee -- Github -- 新浪微博 -- 钉钉 -- 百度 -- coding -- 腾讯云 -- 开源中国 -- 支付宝 -- QQ -- 微信开放平台 -- 微信公众平台 -- 企业微信 -- 淘宝 -- Google -- Facebook -- 抖音 -- 领英 -- 微软 -- 小米 -- 头条 -- Teambition -- 人人 -- Pinterest -- StackOverflow -- 华为 -- 酷家乐 -- Gitlab -- 美团 -- 饿了么 -- 推特 - - 用户信息 - - 响应码 - - Callback Urls规则 -- 阿里云 - - [Web应用登录阿里云](https://help.aliyun.com/document_detail/93696.html?spm=a2c4g.11186623.6.656.1a764138vhg4gr) - - [通过OIDC获取用户信息](https://help.aliyun.com/document_detail/93698.html?spm=a2c4g.11186623.6.658.537dd19eE1eEJh) -- 京东·宙斯 \ No newline at end of file diff --git a/docs/thx.md b/docs/thx.md deleted file mode 100644 index 01e58b6dc628f68edb89330519b856507687fd95..0000000000000000000000000000000000000000 --- a/docs/thx.md +++ /dev/null @@ -1,18 +0,0 @@ -# 致谢 - -在项目立项初期,也对当前开源圈的一些相同类型的项目作过调研,同时本项目也参考过这些项目,再次感谢开源圈内的朋友。 - -- [YurunOAuthLogin](https://gitee.com/yurunsoft/YurunOAuthLogin): PHP 第三方登录授权 SDK -- [阿里妈妈MUX倾力打造的矢量图标库-iconfont](https://www.iconfont.cn/search/index): 本文档中的图标大部分取自该平台 -- [mica](https://github.com/lets-mica/mica):Spring Cloud 微服务开发核心包,支持 `web `和 `webflux`。注:JustAuth项目中的[UuidUtils](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/main/java/me/zhyd/oauth/utils/UuidUtils.java)就是直接使用的mica提供的高性能的uuid创建工具类源码[StringUtil.java](https://github.com/lets-mica/mica/blob/master/mica-core/src/main/java/net/dreamlu/mica/core/utils/StringUtil.java#L335) - - -**感谢 JetBrains 提供的免费开源 License** - -图片引用自lets-mica - -
- -JustAuth - Login, so easy! | Product Hunt Embed - - diff --git a/docs/update.md b/docs/update.md deleted file mode 100644 index 8fc370020164895db29c1639a97ca24cd690281d..0000000000000000000000000000000000000000 --- a/docs/update.md +++ /dev/null @@ -1,372 +0,0 @@ -## 1.15.5 -### 2020/06/24 -- BUG - - 解决 `Microsoft` 授权失败的 BUG - - 解决 `Coding` 个人账号授权失败的 BUG(目前只能使用团队模式进行授权,需要传入团队名,参考`AuthConfig#codingGroupName`) - - 解决 `AuthLinkedinRequest#getAvatar` NPE 的问题。(领英用户没有头像时,原代码会报 NPE) - - 解决抖音登录获取用户地址异常的问题。 - - 解决人人网登录时 token 中带有 `|` 引起的异常,[Gitee!15](https://gitee.com/yadong.zhang/JustAuth/pulls/15) -- 新增 - - 支持阿里云授权登录,[Github#81](https://github.com/justauth/JustAuth/pull/81) - - AuthUser 中新增 `rawUserInfo`,用来存放第三方平台返回的原始用户数据。注:淘宝平台的`rawUserInfo`为一个空 JSON - - 支持 Http 级的代理配置,使用方式: -```java -new AuthGoogleRequest(AuthConfig.builder() - .clientId("") - .clientSecret("") - .redirectUri("http://127.0.0.1:8443/oauth/callback/google") - // 针对国外平台配置代理 - .httpConfig(HttpConfig.builder() - .timeout(15000) - .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080))) - .build()) - .build()); -``` -- 修改 - - 升级 [simple-http](https://github.com/xkcoding/simple-http) 到 `v1.0.2` - - 升级 `fastjson` 到 `v1.2.71` -- 删除 - - :boom: 删除**腾讯云登录**。coding 已并入 腾讯云,因此只保留 coding 登录 :boom: -- 文档 - - 新增 [Coding登录](oauth/coding.md)文档 - - 完善 [支付宝登录](oauth/alipay.md)文档 - - 完善 [贡献者名单](contributors.md)文档 - - 完善 [参考文档](references.md)文档 -- PR - - 合并 [Gitee!17](https://gitee.com/yadong.zhang/JustAuth/pulls/17) - - 合并 [Gitee!15](https://gitee.com/yadong.zhang/JustAuth/pulls/15) - - 合并 [Github#81](https://github.com/justauth/JustAuth/pull/81) -- Issues - - 解决 [Github#80](https://github.com/justauth/JustAuth/issues/80) - - 解决 [Github#75](https://github.com/justauth/JustAuth/issues/75) - -## 1.15.4-alpha -### 2020/05/13 -- 修复 - - 解决 Twitter 授权失败的BUG -- 文档 - - 完善 [https://docs.justauth.whnb.wang](https://docs.justauth.whnb.wang/) 的404引导页内容 - - 增加名词解释: `uuid` - - 补充 [Q&A](Q&A.md) - - 新增 [参考文档](references.md),包含 OAuth 授权和第三方平台的API文档等内容 - - 新增 [推特登录](oauth/twitter.md) 的说明文档 - -> 特别注意:所有国外平台都无法直接通过java进行访问API,目前[simple-http](https://github.com/xkcoding/simple-http) Release版本,暂不支持添加代理,所以目前需要手动开启代理。 - -代理开启的方式: -```java -System.setProperty("proxyPort", "10080"); -System.setProperty("proxyHost", "127.0.0.1"); -``` -以上代码可以在声明 `AuthRequest` 时创建,也可以全局执行。 - -本地如果支持科学上网,就用自己本地的代理端口即可,如果不支持科学上网,可以去网上找一些免费的代理IP进行测试(请自行操作)。 - - -## 1.15.2-alpha -### 2020/05/10 -- 修改 - - 修复使用领英登录时无法获取token的问题 - - 解决Gitee [Issue-I1GPIB](https://gitee.com/yadong.zhang/JustAuth/issues/I1GPIB) - -【声明】:当引用 OkHttp 时,无法调用领英的授权登录,可能会抛出 400 异常。如遇此问题,请先切换到 hutool 或者 httpclient 依赖。 -该问题尚在修复中,给各位带来的不便,深表歉意。 - -- hutool-http - - ```xml - - cn.hutool - hutool-http - 5.2.5 - - ``` - -- httpclient - - ```xml - - org.apache.httpcomponents - httpclient - 4.5.12 - - ``` - -## v1.15.1(~~v1.15.0~~) -### 2020/04/10 -- 修改 - - 更新开发文档 - - 合并Gitee [PR-10](https://gitee.com/yadong.zhang/JustAuth/pulls/10),集成京东登录 - - 合并Gitee [PR-14](https://gitee.com/yadong.zhang/JustAuth/pulls/14),修改帮助文档,加入JA的使用者信息 - - 合并Github [PR-69](https://github.com/justauth/JustAuth/pull/69),升级fastjson的最新版本 - - 解决使用apache-httpclient时的403bug,升级simple-http,感谢QQ群的`不瘦十斤不改名字`反馈该问题 - - 修复其他一些问题 - -【声明】:由于本人的失误,发布了一个错误的版本(1.15.0),目前1.15.0已发布,但是请不要使用,请直接升级到`1.15.1`。 - -给各位造成的不便,深表歉意。 - -## v1.14.0 -### 2020/03/17 -- 修改 - - 合并[PR-59](https://github.com/justauth/JustAuth/pull/59),抽取HTTP,具体实现交给开发者,解耦 hutool-http,开发者可以视自己项目的依赖决定使用何种HTTP方式。详情请参考:https://github.com/xkcoding/simple-http - - 合并[PR-65](https://github.com/justauth/JustAuth/pull/65),修改错误文案 - - 修复其他一些问题 - -## v1.14.0 -### 2020/03/17 -- 修改 - - 合并[PR-59](https://github.com/justauth/JustAuth/pull/59),抽取HTTP,具体实现交给开发者,解耦 hutool-http,开发者可以视自己项目的依赖决定使用何种HTTP方式。详情请参考:https://github.com/xkcoding/simple-http - - 合并[PR-65](https://github.com/justauth/JustAuth/pull/65),修改错误文案 - - 修复其他一些问题 - -## v1.13.2 -### 2019/12/24 -- 新增 - - 增加微信、QQ、支付宝、微博授权登录的帮助文档 - - 合并[PR#57](https://github.com/justauth/JustAuth/pull/57),增加微信公众号登录 by [@xkcoding](https://github.com/xkcoding) - - [帮助文档](https://docs.justauth.whnb.wang)中增加自定义的404页面 - - [帮助文档](https://docs.justauth.whnb.wang)中增加Gittalk插件 - - [帮助文档](https://docs.justauth.whnb.wang)中增加Java代码高亮的插件 - - 增加`AuthUserGender#getWechatRealGender`方法,兼容获取微信平台的用户性别 -- 修改 - - 修复抖音登录取值取错层级的问题([issue#I15SIG@Gitee](https://gitee.com/yadong.zhang/JustAuth/issues/I15SIG)) - - 完善异常提示的逻辑,支持传入Source(平台),发生异常时显示对应的source(平台) - - `checkState`方法从`AuthDefaultRequest`中提出到`AuthChecker`中 - - `AuthResponseStatus`枚举类中增加`ILLEGAL_STATUS`、`REQUIRED_REFRESH_TOKEN`两个枚举值 - - `AuthSource`接口中增加`getName`方法,用来对外提供实际`source`的字符串值 - - `AuthWeiboRequest`微博授权登录中实现`revoke`方法,支持手动回收授权 - - [帮助文档](https://docs.justauth.whnb.wang)中修复[腾讯云登录]链接错误的问题 -- 升级 - - 升级相关依赖:lombok@v1.18.10,hutool@5.0.5,fastjson@1.2.62,alipay@4.8.10.ALL([PR#11@Gitee](https://gitee.com/yadong.zhang/JustAuth/pulls/11)) - - -## v1.13.1 -### 2019/11/12 - -- 修复[Issue#52](https://github.com/justauth/JustAuth/issues/52),解决AuthCallback异常的问题。请正在使用 `v1.13.0`的朋友升级到`v1.13.1` - -## v1.13.0 -### 2019/11/01 - -- 集成“推特” -- 完善文档 - -## v1.12.0 -### 2019/09/06 - -- 集成“美团”授权登录 -- 集成“饿了么”授权登录 -- 升级Fastjson依赖到1.2.60,预防[“Fastjson < 1.2.60 远程拒绝服务漏洞预警”](https://card.weibo.com/article/m/show/id/2309404413257925394542) -- 添加Nutzboot版的demo -- 提取公共的Source接口,支持自定义扩展第三方平台的授权登录,具体扩展例子可参考[AuthExtendRequest](https://gitee.com/yadong.zhang/JustAuth/blob/master/src/test/java/me/zhyd/oauth/request/AuthExtendRequest.java) - -## v1.11.0 -### 2019/09/03 - -- 集成“Gitlab”授权登录 - -### 2019/09/02 - -- 集成“酷家乐”授权登录 - -## v1.10.1 -### 2019/08/17 - -- AuthUser添加构造函数,支持反序列化 - -### 2019/08/08 - -- 项目迁移到组织[justauth](https://github.com/justauth) - -## v1.10.0 -### 2019/08/06 - -- 合并[PR-34](https://github.com/zhangyd-c/JustAuth/pull/34),添加StringUtil单元测试,修复bug -- 合并[PR-35](https://github.com/zhangyd-c/JustAuth/pull/35),集成企业微信 - -### 2019/08/05 - -- 集成华为登录 -- 修改`AuthChecker#checkCode`方法,对于不同平台使用不同参数接受code的情况统一做处理 - -### 2019/08/03 - -合并github上[xkcoding](https://github.com/xkcoding) 的[pr#32](https://github.com/zhangyd-c/JustAuth/pull/32),抽取 cache 接口,方便用户自行集成 cache - -### 2019/08/02 - -- 增加`AuthCache`配置类`AuthCacheConfig.java`,可以自定义缓存有效期以及是否开启定时任务 -- 去掉`slf4j`依赖,封装`Log.java`工具类 -- 规范测试类 - -## v1.9.5 -### 2019/07/31 - -`v1.9.4`版本发布失败,请升级到`1.9.5`版本! - -由此给您带来的不便,敬请谅解! - -## v1.9.4 -### 2019/07/30 - -1. 升级`hutool-http`版本到`v4.6.1` -2. 去除`AuthCallback`中增加的默认的校验state的方法,挪到`AuthDefaultRequest`中做统一处理 -3. `alipay-sdk-java`依赖改为`provided`,如果需要使用支付宝登录,需要使用方手动引入相关依赖,具体操作方式,见项目WIKI; -4. 规范注释 - -## v1.9.3 -### 2019/07/30 - -1. 规范注释 -2. 增加State缓存,`AuthCallback`中增加默认的校验state的方法 -3. 增加默认的state生成方法,参考`AuthStateUtils.java`和`UuidUtils.java` -4. 升级`hutool-http`版本到`v4.6.0` -5. 修复其他一些问题 - -### 2019/07/27 - -1. `IpUtils.getIp`改名为`IpUtils.getLocalIp` -2. 规范注释 - -### 2019/07/25 - -1. `AuthConfig`类中去掉state参数 -2. 删除`AuthState`类 -3. 增加`authorize(String)`方法,并且使用`@Deprecated`标记`authorize()`方法 - -## v1.9.2 -### 2019/07/22 -1. 合并github上[xkcoding](https://github.com/xkcoding) 的[pr#26](https://github.com/zhangyd-c/JustAuth/pull/26),AuthConfig类添加lombok注解,方便 [justauth-spring-boot-starter](https://github.com/xkcoding/justauth-spring-boot-starter) 直接使用 - -## v1.9.1 -### 2019/07/22 -1. 增加`stackoverflow`参数校验 -2. 解决`Pinterest`获取用户失败的问题 -3. 添加注释 - -## v1.9.0 -### 2019/07/19 - -1. 合并github上[@dyc12ii](https://github.com/dyc12ii) 的[pr#25](https://github.com/zhangyd-c/JustAuth/pull/25),升级fastjson版本至1.2.58,避免安全漏洞 -2. `AuthUserGender`枚举类挪到`enums`包下 -3. 删除`AuthBaiduErrorCode`和`AuthDingTalkErrorCode`枚举类 -4. 优化百度授权流程,增加refresh token的方法 -5. 优化`AuthConfig`、`AuthResponse`类,去掉不必要的lombonk注解,减少编译后的代码量 -6. 使用lombok注解优化枚举类 -7. `AuthQqRequest`增加refresh方法 -8. 修复google登录无法获取用户信息的问题 -9. 优化代码 - -### 2019/07/18 - -1. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#19](https://github.com/zhangyd-c/JustAuth/pull/19),集成人人 -2. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#20](https://github.com/zhangyd-c/JustAuth/pull/20),集成Pinterest -3. 合并github上[@pengisgood](https://github.com/pengisgood) 的[pr#21](https://github.com/zhangyd-c/JustAuth/pull/21),集成StackOverflow -4. 合并github上[@xkcoding](https://github.com/xkcoding) 的[pr#23](https://github.com/zhangyd-c/JustAuth/pull/23),重构代码、新增编辑器规范,规范PR代码风格 - -### 2019/07/17 -1. 优化代码 -2. 集成Teambition登录 - -### 2019/07/16 -1. 重构UrlBuilder类 -2. 将CSDN相关的类置为`Deprecated`,后续可能会删除,也可能一直保留。毕竟CSDN的openAPI已经不对外开放了。 -3. `BaseAuthRequest` 改名为 `AuthDefaultRequest` -4. `ResponseStatus` 改名为 `AuthResponseStatus` 并且移动到 `me.zhyd.oauth.model` -5. 合并github上[@xkcoding](https://github.com/xkcoding) 的[pr#18](https://github.com/zhangyd-c/JustAuth/pull/18),修复小米回调错误问题 同时 支持微信获取unionId - -## v1.8.1 -### 2019/07/15 -1. 新增 `AuthState` 类,内置默认的state生成规则和校验规则 - -### 2019/07/12 -1. 合并[Braavos96](https://github.com/Braavos96)提交的[PR#16](https://github.com/zhangyd-c/JustAuth/pull/16) - -## v1.8.0 -### 2019/06/28 -1. 修复百度登录获取不到token失效时间的问题 -2. 增加state参数校验,预防CSRF。**强烈建议启用state**! - -### 2019/06/27 -1. 修复百度登录获取不到token失效时间的问题 -2. 增加state参数校验,预防CSRF。**强烈建议启用state**! -3. 修改login方法的参数为AuthCallback,封装回调返回的参数 -4. 支持state参数 -5. 增加code和state参数校验 - -由于state安全问题,1.8.0以前的版本都有隐藏的CSRF漏洞问题,所以强烈建议正在使用JustAuth的朋友升级到1.8.0版本! - -## v1.7.1 -### 2019/06/25 -qq授权登录时,需要获取`openId`作为`uuid`,在`1.6.1-beta`和`1.7.0`版本中,引入了`unionId`这一属性。获取`unionid`需要单独向qq团队**发送邮件**申请权限,鉴于这一申请权限的步骤比较麻烦(需要填写的内容比较多),所以在`AuthConfig`中增加了一个`unionId`属性,当为**true**时才会获取unionid,当为false时只获取openId。如果你需要该功能, 则在自行申请了相关权限后,将该属性置为true即可。关于unionId的参考链接:[UnionID介绍](http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D) - -## v1.7.0 -### 2019/06/19 -1. 合并[xkcoding](https://github.com/xkcoding)提交的[PR](https://github.com/zhangyd-c/JustAuth/pull/14),重构了部分代码,jar包由原来的`130+kb`优化到现在的`110+kb` -2. 合并[skqing](https://gitee.com/skqing)提交的[PR](https://gitee.com/yadong.zhang/JustAuth/pulls/3), 解决抖音登录失败问题 - -## v1.6.1-beta -### 2019/06/18 -1. 解决Issue [#IY2HW](https://gitee.com/yadong.zhang/JustAuth/issues/IY2HW) -2. 解决Issue [#IY2OH](https://gitee.com/yadong.zhang/JustAuth/issues/IY2OH) -3. 解决Issue [#IY2FV](https://gitee.com/yadong.zhang/JustAuth/issues/IY2FV) -4. 修复部分注释、拼写错误 -5. 解决Issue [#IY1QR](https://gitee.com/yadong.zhang/JustAuth/issues/IY1QR) 增加对Config属性的校验功能,主要校验redirect uri的合法性 -6. 合并[skqing](https://gitee.com/skqing)提交的[PR](https://gitee.com/yadong.zhang/JustAuth/pulls/2),解决一些BUG - -## v1.6.0-beta -### 2019/06/06 -1. 增加今日头条的授权登陆 -2. 发布1.6.0-beta版本,今日头条开发者暂时不能认证, 所以无法做测试,等测试通过后,正式发布release版本 - -## v1.5.0 -### 2019/05/28 -1. 增加小米账号和微软的授权登陆 -2. 发布1.5.0版本 - -## v1.4.0 -### 2019/05/26 -1. 增加抖音和Linkedin的授权登陆 -2. 修改部分图片命名 -3. 优化部分代码 -4. 修复`AuthSource`中腾讯云开发平台的拼写错误:`TENCEN_CLOUD`->`TENCENT_CLOUD` -5. 修复支付宝登陆时用户名为空的问题 - -## v1.3.3 -### 2019/05/24 -1. 修复一些问题 -2. 升级api,在AuthUser中增加`uuid`属性,可以通过`uuid` + `source`唯一确定一个用户,此举解决了用户身份归属的问题。 -3. 发布1.3.3版本的jar包到公开仓库(1.3.2忘记发布了,( ╯□╰ )) -4. 重要:经咨询官方客服得知,CSDN的授权开放平台已经下线,如果以前申请过的应用,可以继续使用,但是不再支持申请新的应用。so, 本项目中的CSDN登录只能针对少部分用户使用了 - -## v1.3.1 -### 2019/05/23 -1. 修复QQ登录的问题 -2. 发布1.3.1版本的jar包到公开仓库 - -## v1.3.0 -### 2019/05/21 -1. 新增google授权登录 -2. 新增facebook授权登录 -3. 发布1.3.0版本的jar包到公开仓库 - -## v1.1.0 -### 2019/05/18 -1. 发布1.1.0版本的jar包到公开仓库(支持qq和微信登录) -2. 支持淘宝登录 -3. 修改`AuthUser.java`类中的`accessToken`属性,由原本的~~accessToken (String)~~改为`token (AuthToken)` -4. 修复一些bug -5. 发布1.2.0版本的jar包到公开仓库(支持淘宝登录) - -### 2019/05/17 -1. 增加qq和微信的授权登录 -2. 修改getAccessToken方法的返回值 - -## v1.0.1 -### 2019/03/27 -集成 支付宝授权登录 - -## v1.0.0 -### 2019/03/25 -史上最全的整合第三方登录的工具,目前已支持Github、Gitee、微博、钉钉和百度、Coding、腾讯云开发者平台和OSChina登录。 Login, so easy! diff --git a/docs/users.md b/docs/users.md deleted file mode 100644 index 5558ac886fc2b345cec187f349198ee9ecefeb6d..0000000000000000000000000000000000000000 --- a/docs/users.md +++ /dev/null @@ -1,12 +0,0 @@ -# Who is using? - -- [spring-boot-demo](https://github.com/xkcoding/spring-boot-demo): spring boot demo 是一个用来学习 spring boot 的项目,总共包含 55 个集成demo,已经完成 46 个。(注:[spring-boot-demo-social](https://github.com/xkcoding/spring-boot-demo/tree/master/spring-boot-demo-social)模块中集成了JustAuth)注:该作者是JustAuth的开发者之一,负责开发QQ登录、微信登录、小米登录、微软登录、谷歌登录。 -- [Guns](https://gitee.com/stylefeng/guns): Guns基于Spring Boot2,致力于做更简洁的后台管理系统。(注:Guns企业版中使用到了JustAuth实现第三方OAuth登录) - -- [Shiro-Action](https://github.com/zhaojun1998/Shiro-Action): 基于 Shiro 的权限管理系统,支持 restful url 授权 -- [project-template](https://github.com/HobbyBear/project-template): 作为前后端分离项目的后端模板整个项目基于springboot2.1.3,集jsr303框架做参数校验,spring security 做权限管理,并实现限制同一账号登陆会话数量功能,spring mail 发送邮件,justAuth做的第三方登陆, spring session做session共享,orm框架采用jpa,集成七牛云实现图片上传,redis实现分布式锁 -- [mica](https://github.com/lets-mica/mica/tree/master/mica-social):mica是Spring Cloud 微服务开发核心包。采用源码形式(保留了作者名)另加改了一些代码。 -- [MaxKey](https://shimingxy.github.io/MaxKey):马克思的钥匙,寓意是最大钥匙,是用户单点登录认证系统(Sigle Sign On System),OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS等标准化的开放协议,使用JustAuth集成OAuth第三方认证。 -... - -我在这儿等你 >>> :alien: diff --git a/docs/using-state.md b/docs/using-state.md deleted file mode 100644 index 3481504071169322aab7269414d10586fae6ddf5..0000000000000000000000000000000000000000 --- a/docs/using-state.md +++ /dev/null @@ -1,53 +0,0 @@ -# 使用State - -## state使用的流程 - -在JustAuth中`state`参数的使用流程如下: - -1. 获取`authorizeUrl`时创建`state`(开发者创建,如果不创建则系统默认生成) -2. 缓存`state`(JustAuth执行) -3. 内置的缓存调度器自动清除已过期的`state`(JustAuth执行) - -## 创建state(开发者) -`state`在OAuth授权流程中是一个**非必要但很重要**的参数,就如[名词解释](https://docs.justauth.whnb.wang/#/explain?id=justauth中的关键词)中描述的:`state`是用来保持授权会话流程完整性,防止CSRF攻击的安全的随机的参数,**由开发者生成**。 - -在JustAuth中提供了一个默认的创建state的方法,使用方式: - -```java -String state = AuthStateUtils.createState() -``` - -`createState`的内部实现其实就是生成了一个UUID(采用 jdk 9 的形式,优化性能),该工具是直接copy自[mica](https://github.com/lets-mica/mica/blob/master/mica-core/src/main/java/net/dreamlu/mica/core/utils/StringUtil.java)(`mica`是一个SpringBoot微服务高效开发工具集,开源地址:[https://github.com/lets-mica/mica](https://github.com/lets-mica/mica)),关于mica uuid生成方式的压测结果,可以参考:https://github.com/lets-mica/mica-jmh/wiki/uuid。 - -除此之外,开发者还可以自己生成特定的`state`参数。 - -## 缓存state(JustAuth) - -在JustAuth中,内置了一个基于map的state缓存器,默认缓存有效期为3分钟(缓存配置见`AuthCacheConfig.java`)。`AuthCacheConfig`中包含两个配置参数: - -- `timeout` 缓存过期时间,默认3分钟 -- `schedulePrune` 是否开启定时清理过期state的任务,默认开启。如果不开启,则需要开发者自己对state做处理,防止map存入过多内容 - -缓存state的操作是在`getRealState`中触发的,不需要开发者自己处理 -```java -/** - * 获取state,如果为空, 则默认取当前日期的时间戳 - * - * @param state 原始的state - * @return 返回不为null的state - */ -protected String getRealState(String state) { - if (StringUtils.isEmpty(state)) { - state = UuidUtils.getUUID(); - } - // 缓存state - authStateCache.cache(state, state); - return state; -} -``` - -注:关于自定义缓存,请参考下节内容。 - -## 清理state(JustAuth) - -JustAuth内置了一个缓存调度器,默认3分钟清理一次过期的`state`,缓存清理时间可以通过`AuthCacheConfig.timeout`进行修改,不建议修改太大。 diff --git a/pom.xml b/pom.xml index 784387748faae42b83fab33c375ab79412b37bb2..394c566fe24a0792045cec49c6920e03e3e631ab 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.zhyd.oauth JustAuth - 1.15.5 + 1.15.6 JustAuth https://gitee.com/yadong.zhang/JustAuth diff --git a/src/main/java/me/zhyd/oauth/config/AuthConfig.java b/src/main/java/me/zhyd/oauth/config/AuthConfig.java index e17bcd89a5aba83ccac8faefb4244f2087ea6710..153585eddfbdfe009ed207f4382169ad1c2f798d 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthConfig.java +++ b/src/main/java/me/zhyd/oauth/config/AuthConfig.java @@ -2,6 +2,7 @@ package me.zhyd.oauth.config; import com.xkcoding.http.config.HttpConfig; import lombok.*; +import me.zhyd.oauth.model.AuthCallback; /** * JustAuth配置类 @@ -79,4 +80,22 @@ public class AuthConfig { * @since 1.15.5 */ private HttpConfig httpConfig; + + /** + * 忽略校验 {@code state} 参数,默认不开启。当 {@code ignoreCheckState} 为 {@code true} 时, + * {@link me.zhyd.oauth.request.AuthDefaultRequest#login(AuthCallback)} 将不会校验 {@code state} 的合法性。 + * + * 使用场景:当且仅当使用自实现 {@code state} 校验逻辑时开启 + * + * 以下场景使用方案仅作参考: + * 1. 授权、登录为同端,并且全部使用 JustAuth 实现时,该值建议设为 {@code false}; + * 2. 授权和登录为不同端实现时,比如前端页面拼装 {@code authorizeUrl},并且前端自行对{@code state}进行校验, + * 后端只负责使用{@code code}获取用户信息时,该值建议设为 {@code true}; + * + * 如非特殊需要,不建议开启这个配置 + * + * 该方案主要为了解决以下类似场景的问题: + * @see https://github.com/justauth/JustAuth/issues/83 + */ + private boolean ignoreCheckState; } diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index c47b6dc844759a445f17d8e65f31bf0a888d0b9e..5d615eef45ad95160a7e823d33c8356edcaf4032 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -11,9 +11,11 @@ import com.alipay.api.response.AlipayUserInfoShareResponse; import me.zhyd.oauth.cache.AuthStateCache; import me.zhyd.oauth.config.AuthConfig; import me.zhyd.oauth.config.AuthDefaultSource; +import me.zhyd.oauth.enums.AuthResponseStatus; import me.zhyd.oauth.enums.AuthUserGender; import me.zhyd.oauth.exception.AuthException; import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.utils.StringUtils; @@ -63,6 +65,37 @@ public class AuthAlipayRequest extends AuthDefaultRequest { .build(); } + /** + * 刷新access token (续期) + * + * @param authToken 登录成功后返回的Token信息 + * @return AuthResponse + */ + @Override + public AuthResponse refresh(AuthToken authToken) { + AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); + request.setGrantType("refresh_token"); + request.setRefreshToken(authToken.getRefreshToken()); + AlipaySystemOauthTokenResponse response = null; + try { + response = this.alipayClient.execute(request); + } catch (Exception e) { + throw new AuthException(e); + } + if (!response.isSuccess()) { + throw new AuthException(response.getSubMsg()); + } + return AuthResponse.builder() + .code(AuthResponseStatus.SUCCESS.getCode()) + .data(AuthToken.builder() + .accessToken(response.getAccessToken()) + .uid(response.getUserId()) + .expireIn(Integer.parseInt(response.getExpiresIn())) + .refreshToken(response.getRefreshToken()) + .build()) + .build(); + } + @Override protected AuthUser getUserInfo(AuthToken authToken) { String accessToken = authToken.getAccessToken(); diff --git a/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java b/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java index fe17868858a78efbf16a16f74fc1f0f5ee188ed0..241840008717da963680ebff7f7dd472081abf21 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthDefaultRequest.java @@ -74,7 +74,9 @@ public abstract class AuthDefaultRequest implements AuthRequest { public AuthResponse login(AuthCallback authCallback) { try { AuthChecker.checkCode(source, authCallback); - AuthChecker.checkState(authCallback.getState(), source, authStateCache); + if (!config.isIgnoreCheckState()) { + AuthChecker.checkState(authCallback.getState(), source, authStateCache); + } AuthToken authToken = this.getAccessToken(authCallback); AuthUser user = this.getUserInfo(authToken); diff --git a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java index 3a2292aa9133b0ab7659851eeef1bc81711e758d..0ec43a8b5e71b87db3eb57f311155263a3e3f2cc 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthLinkedinRequest.java @@ -157,19 +157,6 @@ public class AuthLinkedinRequest extends AuthDefaultRequest { return firstName; } - @Override - public AuthResponse refresh(AuthToken oldToken) { - String refreshToken = oldToken.getRefreshToken(); - if (StringUtils.isEmpty(refreshToken)) { - throw new AuthException(AuthResponseStatus.REQUIRED_REFRESH_TOKEN, source); - } - String refreshTokenUrl = refreshTokenUrl(refreshToken); - return AuthResponse.builder() - .code(AuthResponseStatus.SUCCESS.getCode()) - .data(this.getToken(refreshTokenUrl)) - .build(); - } - /** * 检查响应内容是否正确 *