微信小程序中,我添加了一个《寻道大千》的游戏,它弹出来一个获取微信用户信息的小窗口,只有点击允许,然后我才能愉快地砍树;
我又添加了一个《咸鱼之王》的游戏,它又弹出来获取信息的窗口,我点了允许,才能做咸鱼……
概念
SSO
即单点登录的英文首字母缩写(Single Sign-On)。
简单点理解,我输入过微信号、密码之后成功登录微信,那么我就不需要再去寻道或者咸鱼这两个游戏中再注册登录了。即:
一次登录,能访问多个系统
OAuth2.0
SSO只是一种思想,我们可以有很多方式去实现SSO,比如用OAuth2去实现。
OAuth2是一个协议,用来允许用户可以不输入账密,通过令牌的方式让第三方的应用拿到用户存在另一个系统上的部分信息。
背景
现在我们开发了一个系统叫寻道咸鱼。本来自身让用户输入账密进入寻道咸鱼系统就可以了,但是现在人们都懒了,不想输入账密。
能实现需求需要这么几个角色:
1、统一平台。用户只需要在这个平台注册登录,就可以体验所有系统
2、寻道咸鱼系统。我们开发做的系统,原来是有自己的注册登录的逻辑的
3、其它系统。可以理解为已经做好了SSO登录的其它系统
统一平台可以看到所有其它系统,并且只要在统一平台登录过了,进入其它系统时自动就有账号。
步骤
1、首先要获取统一平台的信任
要让用户登录统一平台后直接能够进入寻咸的系统,那寻咸跟统一平台肯定要有联系。所以直接去统一平台做一些操作,比如在统一平台的管理处创建个应用什么的,一般能够拿到:
appId: 100100001 # 这个是表示寻咸这个应用在统一平台的标志号,能够通过这个定位到具体的应用
appSecret: abcdefg1qaz23$ # 这个是开发者自己接入统一平台的凭证
redirectUri: http://www.xunxian.com/callback # 这个一般是寻咸的开发者自己配置的地址,用于处理登录回调
2、统一平台做的操作
统一平台应该会提供一个寻咸图标按钮,当用户点击这个寻咸按钮,就会访问统一平台的授权中心。
如果用户已登录,则直接重定向到上面配置的redirectUri,并且携带一个code参数;
否则直接重定向到统一登录的页面。
3、假设用户已经登录统一平台
点击统一平台的寻咸按钮,携带code跳转到配置好的redirectUri,相当于是向我们的寻咸系统www.xunxian.com/callback接口发起GET请求:http://www.xunxian.com/callback?code=abcdefg。
这个接口是我们寻咸系统提供的,那么它可以接收到这个code,并且利用这个code去做如下事情:
@GetMapping("/callback")