
使用 Authing 可以轻松接入许多社会化登录,同时无需翻看社会化登录提供方的繁琐接入文档,让开发者更加专注业务从而提升开发效率。
 这看起来很方便,But,通过 Authing 登录的社会化登录用户,无法获取更高级的权限!以 Github 举例:授权域功能上线之前,通过 Authing 登录的 Github 用户无法授权读写仓库、读写 Issues 等权限;此功能上线后,通过 Authing 登录的 Github 用户将拥有这些高阶权限的授权能力。如 Github 授权域(图中的 Scope 参数):
这看起来很方便,But,通过 Authing 登录的社会化登录用户,无法获取更高级的权限!以 Github 举例:授权域功能上线之前,通过 Authing 登录的 Github 用户无法授权读写仓库、读写 Issues 等权限;此功能上线后,通过 Authing 登录的 Github 用户将拥有这些高阶权限的授权能力。如 Github 授权域(图中的 Scope 参数): QQ 授权域(图中的 Scope 参数):
QQ 授权域(图中的 Scope 参数): 微博授权域(图中的 Scope 参数):
微博授权域(图中的 Scope 参数): 开发者只需要勾选以上 checkbox 就可以很方便的拥有这些能力!授权流程
开发者只需要勾选以上 checkbox 就可以很方便的拥有这些能力!授权流程- 用户通过 Authing 登录; 
- 用户在 Authing 登录界面中点击「使用 Github 登录」; 
- 用户通过 Github 登录后 Authing 将 Github 的信息集成到 Authing 用户信息中; 
- Authing 返回 Code 给开发者配置好的 redirct_uri; 
- 开发者使用 Code 换取 access_token; 
- 开发者使用 access_token 换取用户信息; 
- 开发者在用户信息中获取用户在 Github 平台的 access_token,然后获取操作 Github 的更高级权限; 
- 开发者完成用户认证并开始引导用户执行业务流程; 
 开启社会化登录授权域创建 Github 应用在 Github 申请 OAuth 应用,同时授权回调地址填写 Authing 提供的地址:https://oauth.authing.cn/oauth/github/redirect,如下图所示:
开启社会化登录授权域创建 Github 应用在 Github 申请 OAuth 应用,同时授权回调地址填写 Authing 提供的地址:https://oauth.authing.cn/oauth/github/redirect,如下图所示: 创建完成后记录 Client ID 和 Client Secret:
创建完成后记录 Client ID 和 Client Secret: 配置社会化登录在Authing 控制台中依次点击第三方登录 -> 社会化登录 -> Github,打开 Github 登录,填写 Github OAuth 应用信息,并在 Scopes 多选框中勾选 repo,最后点击确定:
配置社会化登录在Authing 控制台中依次点击第三方登录 -> 社会化登录 -> Github,打开 Github 登录,填写 Github OAuth 应用信息,并在 Scopes 多选框中勾选 repo,最后点击确定: repo 授权域的作用是授权第三方应用读写 Github 仓库的权限。如果你想了解其他 Scope 的含义,请查看这篇文档:https://docs.authing.cn/authing/advanced/social-login/social-login-scopes。体验拥有更高权限的 Github 登录访问登录页面在 Authing 控制台 > 第三方登录 > OIDC 应用,找到你的 OIDC 应用,点击体验按钮。
repo 授权域的作用是授权第三方应用读写 Github 仓库的权限。如果你想了解其他 Scope 的含义,请查看这篇文档:https://docs.authing.cn/authing/advanced/social-login/social-login-scopes。体验拥有更高权限的 Github 登录访问登录页面在 Authing 控制台 > 第三方登录 > OIDC 应用,找到你的 OIDC 应用,点击体验按钮。 如果没有 OIDC 应用,请先创建 OIDC 应用。转到登录界面后,点击「使用 Github 登录」,如下图所示:
如果没有 OIDC 应用,请先创建 OIDC 应用。转到登录界面后,点击「使用 Github 登录」,如下图所示: 在弹出的窗口中,与 Github 完成登录认证,之后会显示确权页面,可见此处提示需要授权 repo,如下图所示:
在弹出的窗口中,与 Github 完成登录认证,之后会显示确权页面,可见此处提示需要授权 repo,如下图所示: 点击授权按钮,之后是 Authing 单点登录中的确权环节:
点击授权按钮,之后是 Authing 单点登录中的确权环节: 点击「授权登录」,之后会跳转到在 OIDC 应用中设置的业务回调地址:
点击「授权登录」,之后会跳转到在 OIDC 应用中设置的业务回调地址: 获取到 code 之后,你可以参考以下链接完成登录:1. https://docs.authing.cn/authing/advanced/oidc/oidc-authorization#04-shi-yong-code-huan-qu-token获取社会化登录 token那么接下来如何从 Authing 获取并使用 Github 的 access_token,使用更高级的权限呢?只要获取用户资料即可,Github 的 access_token 存在用户资料中。以下以 Authing Node.js SDK 来举例:安装 authing-js-sdk:
获取到 code 之后,你可以参考以下链接完成登录:1. https://docs.authing.cn/authing/advanced/oidc/oidc-authorization#04-shi-yong-code-huan-qu-token获取社会化登录 token那么接下来如何从 Authing 获取并使用 Github 的 access_token,使用更高级的权限呢?只要获取用户资料即可,Github 的 access_token 存在用户资料中。以下以 Authing Node.js SDK 来举例:安装 authing-js-sdk:$ npm install authing-js-sdkconst Authing = require('authing-js-sdk');const userPoolId = "你的用户池 ID";const secret = "你的用户池 Secret";let authing = new Authing({  userPoolId,  secret});async function go() {  let user = await authing.user({id: 'Authing 用户 ID'});  console.log(user);}go();{  ...  "thirdPartyIdentity": {    "provider": "github",    "refreshToken": null,    "expiresIn": null,    "updatedAt": "2020-02-11T21:56:50+08:00",    "accessToken": "1a20a073f967264a7e7d05528236525b1376a4a9"  }  ...}$ curl -H "Authorization: token 1a20a073f967264a7e7d05528236525b1376a4a9" https://api.github.com/user/repos\?visibility\=private 刷新社会化登录 token如果社会化登录方的 token 在一定时间后失效,会导致旧的 token 无法访问社会化登录方的服务,因此需要刷新社会化登录方的 token,并使用新的 token 调用相关服务。你可以调用 SDK 中的 refreshThirdPartyToken 方法来刷新社会化登录 token:
刷新社会化登录 token如果社会化登录方的 token 在一定时间后失效,会导致旧的 token 无法访问社会化登录方的服务,因此需要刷新社会化登录方的 token,并使用新的 token 调用相关服务。你可以调用 SDK 中的 refreshThirdPartyToken 方法来刷新社会化登录 token:const Authing = require('authing-js-sdk');const userPoolId = "你的用户池 ID"const secret = "你的用户池 Secret"let authing = new Authing({  userPoolId,  secret})async function go() {  let res = await authing.refreshThirdPartyToken('Authing 用户 ID');  console.log(res);}go();
返回结果:{  refreshSuccess: true,  message: 'github token 无需刷新,官网文档已说明长期有效',  provider: 'github',  refreshToken: null,  accessToken: '1a20a073f967264a7e7d05528236525b1376a4a9',  updatedAt: '2020-02-11T21:57:04+08:00'}