From 28466f8ab5e895b8a8516f40cecea649f1708834 Mon Sep 17 00:00:00 2001 From: "yadong.zhang" Date: Wed, 13 May 2020 02:19:20 +0800 Subject: [PATCH] =?UTF-8?q?:memo:=20=E6=9B=B4=E6=96=B0=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Q&A.md | 11 +++++ docs/_404.md | 7 ++- docs/_sidebar.md | 2 + docs/explain.md | 7 +++ docs/oauth/twitter.md | 104 ++++++++++++++++++++++++++++++++++++++++++ docs/references.md | 43 +++++++++++++++++ docs/thx.md | 3 ++ docs/update.md | 23 ++++++++++ 8 files changed, 198 insertions(+), 2 deletions(-) create mode 100644 docs/oauth/twitter.md create mode 100644 docs/references.md diff --git a/docs/Q&A.md b/docs/Q&A.md index 274e120..75316d5 100644 --- a/docs/Q&A.md +++ b/docs/Q&A.md @@ -150,4 +150,15 @@ AuthRequest authRequest = new AuthQqRequest(AuthConfig.builder() 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/_404.md b/docs/_404.md index 50f699b..d762b41 100644 --- a/docs/_404.md +++ b/docs/_404.md @@ -1,8 +1,8 @@ # :alien: 404:alien: -**非常感谢您对JustAuth的关注**,您现在查询的内容,作者正在补充中! +**非常感谢您对JustAuth的关注**,您现在查询的内容,作者**正在补充**中! -您可能对以下文章感兴趣: +### 您可能对以下文章感兴趣: - [OAuth的授权流程是什么样的?](https://docs.justauth.whnb.wang/#/oauth) - [如何使用JustAuth?](https://docs.justauth.whnb.wang/#/how-to-use) @@ -25,6 +25,9 @@ - [酷家乐登录](oauth/kujiale.md) - 更多文章,正在补充中... +### 其他资料 + +- [参考文档](references.md) ### 如果还是没有您想要的内容,您可以: diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 5b246a1..67d3074 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -13,6 +13,7 @@ - [√ 微博登录](oauth/weibo.md) - [√ 支付宝登录](oauth/alipay.md) - [√ 酷家乐登录](oauth/kujiale.md) + - [√ 推特登录](oauth/twitter.md) - [CSDN登录](oauth/csdn.md) - [微信企业版登录](oauth/wechatEnterprise.md) - [微信公众平台登录](oauth/wechat_mp.md) @@ -46,4 +47,5 @@ - [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/explain.md b/docs/explain.md index 56f9525..c0cbb93 100644 --- a/docs/explain.md +++ b/docs/explain.md @@ -19,6 +19,13 @@ - `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 在某一平台中是唯一的,但不能保证在所有平台中都是唯一的。 ## 参考资料 diff --git a/docs/oauth/twitter.md b/docs/oauth/twitter.md new file mode 100644 index 0000000..31a2d6e --- /dev/null +++ b/docs/oauth/twitter.md @@ -0,0 +1,104 @@ +## 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/references.md b/docs/references.md new file mode 100644 index 0000000..79583b7 --- /dev/null +++ b/docs/references.md @@ -0,0 +1,43 @@ +## 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规则 diff --git a/docs/thx.md b/docs/thx.md index 777b037..01e58b6 100644 --- a/docs/thx.md +++ b/docs/thx.md @@ -13,3 +13,6 @@
+JustAuth - Login, so easy! | Product Hunt Embed + + diff --git a/docs/update.md b/docs/update.md index 795864e..a04e789 100644 --- a/docs/update.md +++ b/docs/update.md @@ -1,3 +1,26 @@ +## 1.15.3-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 - 修改 -- GitLab