素马网站设计公司,没有网站的域名,wordpress本地搬家,清控人居建设集团网站JWT鉴权机制
1.JWT用于登录身份验证
2.用户登录成功后#xff0c;后端通过JWT机制生成一个token#xff0c;返回给客户端
3.客户端后续的每次请求都需要携带token#xff0c;放在header的authorization中
4.后端从authorization中拿到token后#xff0c;通过secretKey进…JWT鉴权机制
1.JWT用于登录身份验证
2.用户登录成功后后端通过JWT机制生成一个token返回给客户端
3.客户端后续的每次请求都需要携带token放在header的authorization中
4.后端从authorization中拿到token后通过secretKey进行解密验证省份
JWT生成的Token由三部分组成header.payload.signature
**header**主要是声明采用的加密算法
alg指定生成signature采用的加密算法默认是HS256
typ令牌类型jwt
**payload**载荷消息体这里存放实际的内容
exp设置过期时间
uid用户uid
除了设置过期时间和用户的uid还可以添加自定义私有字段使用base64url进行编码组成JWT的第二部分
signature
Signature HMACSHA256(base64Url(header).base64Url(payload),secretKey)优点
json具有通用性所以可以跨语言组成简单字节占用小便于传输服务端无需保存会话信息很容易进行水平扩展一处生成多处使用可以在分布式系统中解决单点登录问题可防护CSRF攻击
缺点
payload部分仅仅是进行简单编码所以只能用于存储逻辑必需的非敏感信息需要保护好加密密钥一旦泄露后果不堪设想为避免token被劫持最好使用https协议
共享登录SSO
同域名下的单点登录
cookie的domain属性设置为当前域的父域并且父域的cookie会被子域所共享。path属性默认为web应用的上下文路径
利用 Cookie 的这个特点没错我们只需要将Cookie的domain属性设置为父域的域名主域名同时将 Cookie的path属性设置为根路径将 Session ID或 Token保存到父域中。这样所有的子域应用就都可以访问到这个Cookie
不过这要求应用系统的域名需建立在一个共同的主域名之下如 tieba.baidu.com 和 map.baidu.com它们都建立在 baidu.com这个主域名之下那么它们就可以通过这种方式来实现单点登录
不同域名下的单点登录使用PostMessage
单点登录完全用前端来实现前端拿到Token之后前端通过 iframepostMessage() 方式将同一份 Token 写入到了多个域下的 LocalStorage 中前端每次在向后端发送请求之前都会主动从 LocalStorage 中读取Token并在请求中携带这样就实现了同一份Token 被多个域所共享此种实现方式完全由前端控制几乎不需要后端参与同样支持跨域
// 获取 token
var token result.data.token;// 动态创建一个不可见的iframe在iframe中加载一个跨域HTML
var iframe document.createElement(iframe);
iframe.src http://app1.com/localstorage.html;
document.body.append(iframe);
// 使用postMessage()方法将token传递给iframe
setTimeout(function () {iframe.contentWindow.postMessage(token, http://app1.com);
}, 4000);
setTimeout(function () {iframe.remove();
}, 6000);// 在这个iframe所加载的HTML中绑定一个事件监听器当事件被触发时把接收到的token数据写入localStorage
window.addEventListener(message, function (event) {localStorage.setItem(token, event.data)
}, false);认证中心来实现单点登录
当用户首次访问时需要在认证中心登录 1.当用户访问网站a.com下面的pageA页面
2.由于没有登录则系统A会返回给浏览器302重定向并带上回调地址 www.sso.com?return_uria.com/pageA以便登录后直接进入对应页面。
3.重定向302之后浏览器去访问重定向地址认证中心验证未登录则展示form提示用户登录
4.用户在认证中心输入账号密码提交登录
5.认证中心验证账号密码有效然后重定向 a.com?ticket123 带上授权码 ticket并将认证中心 sso.com 的登录态写入 Cookie
6.在 a.com 服务器中拿着 ticket 向认证中心确认授权码 ticket 真实有效。
7.验证成功后服务器将登录信息写入 Cookie此时客户端有 2 个 Cookie 分别存有 a.com 和 sso.com 的登录态 前端常见登录实现方案 单点登录方案 - 掘金 (juejin.cn)