architect:sso
Table of Contents
单点登录-序言
单点登录,即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的实现方案的。 比如文章: 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