User Tools

Site Tools


architect:sso

单点登录-序言

单点登录,即Single Sign On (SSO), 指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

目前流行的3种实现方案: 方案A:JWT:Json Web Tokens (无法跨域) 方案B: 共享Cookie (无法跨域) 方案C:OAuth2.0

方案A:JWT

详细看阮一峰的文档: http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

大致原理:登录以后服务器返回给 浏览器 一段密文,其对应明文的内容大致是:  Header.Payload.Signature   (都用 . 分开)
Header部分: 对应的格式之类的,
PayLoad部分: 这个用户的内容信息.(相当于把用户信息放在浏览器上存储了)
Signature部分: 验签信息,防止信息被篡改。

因为整个密文都是通过cookie传回给服务器的,所以无法做到跨域的, 相对cookie长度较大

方案B:共享Cookie

方案C:OAuth2

以下图,是OAuth2中静默授权的方式 实现单点登录。

其实比如向微信小程序,微信公众号。都是用的显式授权的方式登录的。

其实市面上大部分都是在用OAuth2的实现方案的。 比如文章: https://blog.csdn.net/banat020/article/details/85083869 文件最后有对应的源码地址 其实基本上都是一些配置,因为真正的实现都有成熟的jar只是引用进来而已。

关于微信授权

1 去微信公众号上配置好授权域,比如我配置的是 http://www.xiaosq.com


2 当用户想去授权的时候,需要直接跳转到
https://open.weixin.qq.com/connect/oauth2/authorize?appid=[appid]&redirect_uri=[redirect_uri]&scope=[scope]&response_type=code&state=STATE#wechat_redirect

其中
[appid]  Appid
[redirect_uri]  您希望授权结束后跳转的URL,当然这个URL必须是 第一步配置的授权域的子路径
[scope]     等于 "snsapi_base" 静默授权拿到基础信息 或者 "snsapi_userinfo" 手动授权,能拿到更多信息

3 当完成授权以后,浏览器会自动跳转到 
刚才天的redirect_uri 比如 http://www.xiaosq.com/wiki/morgan?code=041WADkj0kYSJl1Lqbjj0l4pkj0WADk1&state=STATE

额外会加上参数: code,也就是authCode。


4 要确保 http://www.xiaosq.com/wiki/morgan?code=041WADkj0kYSJl1Lqbjj0l4pkj0WADk1&state=STATE 调用你的服务层

那么接着
服务层拿到code以后

调用这个https://api.weixin.qq.com/sns/oauth2/access_token?appid=[appid]&secret=[secret]&code=[code]"&grant_type=authorization_code";

获取auth的 accessToken 和openId

然后用这两个信息 调用: https://api.weixin.qq.com/sns/userinfo?access_token=[access_token]&openid=[openid]"&lang=zh_CN";

便能取得 这个用户的微信信息了。
architect/sso.txt · Last modified: 2019/11/15 03:24 by 127.0.0.1

Except where otherwise noted, content on this wiki is licensed under the following license: 沪ICP备12046235号-2
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki