websocket jwt token

这篇具有很好参考价值的文章主要介绍了websocket jwt token。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在websocket中,目前未提供修改请求头字段的方法,不过可以借助于“Sec-WebSocket-Protocol”,将token放入请求头中,后端收到请求后,从请求头中取得token做校验。

即:在前端websocket中放入token

let token=localStorage.getItem(“token”)
this.socket = new WebSocket(terminalWsUrl,[token]);//在webscoket中放入token
后端接收到请求后,从header中取出“Sec-WebSocket-Protocol”,做校验

token = context.Request.Header.Get(“Sec-WebSocket-Protocol”)
if len(token) == 0 {
ResponseError(context, 11000, errors.New(“请求未携带token,无权限访问”))
context.Abort()
return
}
另外需要注意的是,在响应头上添加Sec-Websocket-Protocol,如下是在grilla/websocket响应中设置Sec-Websocket-Protocol的方式

var upgrader = func(r *http.Request) *websocket.Upgrader {
upgrader := &websocket.Upgrader{}
upgrader.HandshakeTimeout = time.Second * 2
upgrader.CheckOrigin = func(r *http.Request) bool {
return true
}
upgrader.Subprotocols = []string{r.Header.Get(“Sec-Websocket-Protocol”)} //设置Sec-Websocket-Protocol
return upgrader
}
多数时候,浏览器出现下面异常提示信息,就是因为响应报文头中没有Sec-Websocket-Protocol导致的

WebSocket: Error during WebSocket handshake: Sent non-empty ‘Sec-WebSocket-Protocol’ header but no response was receivedWebSocket:WebSocket
引用链接:
https://www.cnblogs.com/cosmos-wong/p/16981816.html

(1)https://blog.csdn.net/weixin_43277309/article/details/123129650
(2)https://www.jianshu.com/p/7b1deb1e0a07?utm_campaign=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com

记一次websocket连接时,前后端使用token鉴权,导致连接失败的原因
前后端通过websocket通信,但是需要鉴权,可以利用websocket的子协议来传输token,代码如下:

var ws = new WebSocket(“ws://localhost/ws”,[token]);
在后面加上[这里是token内容]。这样请求头就会携带:

Sec-WebSocket-Protocol:token value
参数是一个数组。如果数组有多个值,后端也会接受到逗号隔开的值。

后端可以获取这个token进行鉴权。

重点来了!

如果传递了token参数,后端响应的时候,也必须带上这个token响应!否则前端接收不到数据!

而后端的websocket如果在header里携带token呢?这里给出golang 的写法:

var upgrader = websocket.Upgrader{
Subprotocols: []string{r.Header.Get(“Sec-WebSocket-Protocol”)},
}
通过这样设置,前后端就可以携带token愉快的通信了。

完。文章来源地址https://www.toymoban.com/news/detail-508771.html

到了这里,关于websocket jwt token的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue——接口修改请求头——有些接口不需要请求头传递token——基础积累

    最近在写后台管理系统的时候,遇到一个切换租户的功能。在请求接口的时候不需要传递 token 直接上代码吧: 完成!!!多多积累,多多收获! 下面介绍一下 axios 的基本用法: axios官网:https://www.axios-http.cn/docs/intro Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器

    2024年02月13日
    浏览(49)
  • netty-websocket 鉴权token及统一请求和响应头(鉴权控制器)

    自己想法和实现,如果有说错的或者有更好的简单的实现方式可以私信交流一下(主要是实现握手时鉴权) 握手鉴权是基于前台请求头 Sec-WebSocket-Protocol的 本身socket并没有提供自定义请求头,只能自定义 Sec-WebSocket-Protocol的自协议 socket握手请求是基于http的,握手成功后会升级为

    2024年02月04日
    浏览(41)
  • 前端刷新token,判断token是否过期(jwt鉴权)

    4.1 什么是 JWT JWT 是 Auth0 提出的通过 对 JSON 进行加密签名来实现授权验证的方案; 就是登录成功后将相关用户信息组成 JSON 对象,然后对这个对象进行某种方式的加密,返回给客户端; 客户端在下次请求时带上这个 Token; 服务端再收到请求时校验 token 合法性,其实也就是在

    2024年02月03日
    浏览(60)
  • jwt的token如何刷新?

    Token 都有过期时间。那么问题来了,假设 Token 过期时间为15天,用户在第14天的时候,还可以免登录正常访问系统。但是到了第15天,用户的Token过期,于是用户需要重新登录系统。 HttpSession 的过期时间 比较优雅,默认为15分钟。如果用户连续使用系统,只要间隔时间不超过

    2024年02月01日
    浏览(59)
  • JWT Token在线解析解码

    项目使用 spring boot + shiro + jwt 作为授权登录,调用登录接口,生成如下token:

    2024年02月11日
    浏览(63)
  • SaaS是什么,目前主流的国内SAAS平台提供商有哪些?

    SaaS是什么,目前主流的国内SAAS平台提供商有哪些? SaaS这个概念近两年可谓说是十分火热,尤其是后疫情时代。 但还是有很多人对SaaS这个名词云里雾里,被碎片化的信息裹挟,并没有真正意义上理解SaaS的概念。 这篇就综合几位知乎元老级答主的观点,以及我个人的见解,

    2024年02月01日
    浏览(47)
  • JWT主动校验Token是否过期

    JSON Web Token(简称 JWT)是目前最流行的跨域认证解决方案 在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP 协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个 request 请求时它就把刚刚的资料忘了。于是我们的程序就不知道谁是谁

    2024年02月09日
    浏览(70)
  • JWT json web token

    jwt(json web token) 主要是做鉴权用的登录之后存储用户信息 下面这段就是生成的token(令牌) eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiaWF0IjoxNjg3Njc0NDkyLCJleHAiOjE2ODc3NjA4OTJ9.Y6eFGv4KXqUhlRHglGCESvcJEnyMkMwM1WfICt8xYC4 JWT是三部分组成的 头部(Header):头部通常由两部分组成:令牌的类型(即 “JW

    2024年02月10日
    浏览(53)
  • Json Web Token(JWT)

    JSON Web Token (JWT) 是一个开放标准 ( RFC 7519 ),它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式安全传输信息。此信息可以验证和信任,因为它是数字签名的。JWT 可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。 1.Authorization(授权):

    2024年02月19日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包