使用 Authing 可以轻松接入许多社会化登录,同时无需翻看社会化登录提供方的繁琐接入文档,让开发者更加专注业务从而提升开发效率。
这看起来很方便,But,通过 Authing 登录的社会化登录用户,无法获取更高级的权限!以 Github 举例:授权域功能上线之前,通过 Authing 登录的 Github 用户无法授权读写仓库、读写 Issues 等权限;此功能上线后,通过 Authing 登录的 Github 用户将拥有这些高阶权限的授权能力。如 Github 授权域(图中的 Scope 参数):QQ 授权域(图中的 Scope 参数):微博授权域(图中的 Scope 参数):开发者只需要勾选以上 checkbox 就可以很方便的拥有这些能力!授权流程用户通过 Authing 登录;
用户在 Authing 登录界面中点击「使用 Github 登录」;
用户通过 Github 登录后 Authing 将 Github 的信息集成到 Authing 用户信息中;
Authing 返回 Code 给开发者配置好的 redirct_uri;
开发者使用 Code 换取 access_token;
开发者使用 access_token 换取用户信息;
开发者在用户信息中获取用户在 Github 平台的 access_token,然后获取操作 Github 的更高级权限;
开发者完成用户认证并开始引导用户执行业务流程;
$ npm install authing-js-sdk
初始化 SDK 并获取用户资料:const 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"
}
...
}
使用社会化登录 token从上一步的返回结果中取出 Github Token 后,调用读取用户仓库信息的 API:$ curl -H "Authorization: token 1a20a073f967264a7e7d05528236525b1376a4a9" https://api.github.com/user/repos\?visibility\=private
可以看到返回了用户的私有仓库信息:刷新社会化登录 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'
}
由于 Github 不提供 refresh_token 并且 access_token 长期有效,所以此处其实并未真正刷新 token。其他社会化登录方如微信、QQ 提供刷新 token 功能,通过 SDK 刷新 token 时,Authing 会发出刷新 token 请求,并返回新的 accessToken 和 refreshToken。总结以上就是 Authing + Github 社会化登录的使用方式。总结起来,Authing 帮你省去了服务器处理 OAuth 2.0 协议中 code 换 token,token 换用户信息的过程,能够直接将用户信息返回给你。同时 Authing 易用的 SDK 能够帮你快速接入获取、刷新用户社会化登录 token 的功能。如果你还需要其他社会化登录,比如微博、微信,那么此时的身份整合与管理作用的优势就体现出来,同时你也无需阅读国内质量参差不齐的授权登录开发文档。你只需要填写配置信息,Authing 会帮你拼接授权 URL 链接,Authing 会帮你处理 OAuth 2.0 协议中换取用户信息的繁琐过程,并将用户信息直接返回给你的业务地址,Authing 会帮你绑定不同的第三方社会化登录提供商,Authing 为你提供简单易用的 SDK,轻松获取、刷新用户的社会化登录 token。