当前位置: 首页 > 知识库问答 >
问题:

WebSocket JWT令牌连接授权

柯轶
2023-03-14

我正在尝试与URL(python客户端)建立websocket连接,该URL需要传入jwt令牌,服务器(在GO中实现)在上侦听该请求,并应该通过解析令牌进行身份验证。

我试着用这部分代码来提出请求-

def test_auth_token(token)
    conn = create_connection("ws://<IP>:port"+ '/'+ container.uuid + '?token='+token)
    result = conn.recv()
    assert result is not None

此请求命中运行此代码以验证此请求的服务器

func ParseFromRequest(req*http.Request,keyFunc-keyFunc)(令牌*令牌,错误){

// Look for an Authorization header
if ah := req.Header.Get("Authorization"); ah != "" {
    // Should be a bearer token
    if len(ah) > 6 && strings.ToUpper(ah[0:6]) == "BEARER" {
        return Parse(ah[7:], keyFunc)
    }
}

// Look for "access_token" parameter
req.ParseMultipartForm(10e6)
if tokStr := req.Form.Get("access_token"); tokStr != "" {
    return Parse(tokStr, keyFunc)
}

return nil, ErrNoTokenInRequest

}

每次,我都会得到“ErrNoTokenInRequest”输出,尽管我将令牌作为查询参数传递。服务器端令牌验证由包含上述GO例程的外部库执行-https://github.com/dgrijalva/jwt-go/blob/master/jwt.go

我不确定,服务器找不到客户端中发送的令牌的可能原因是什么?它应该作为有效载荷、报头或其他东西发送吗?有人能指出让这个模块工作吗?

使用“access\u token”作为查询参数,我得到了这个异常-

self = <websocket._core.WebSocket object at 0x10a15a6d0>
host = 'x.x.x.x.', port = 9345
resource = '/v1/stats/fff51e85-f2bb-4ace-8dcc-fde590932cca?access_token=eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE0MjIxMzEyMzUsInN1YiI6ImNh...vxvBmtZRrUTY5AcvrjbojXqLxFHL_CMsmTZfTXhOiy-7W2V95bqts2Wy4R8oQvsfDylYJWCBTzZNKHvPVFpcl0jQKLm1ms-LOJg1w-k23VfojZucPGtY5A'
options = {}
headers = ['GET /v1/stats/fff51e85-f2bb-4ace-8dcc-fde590932cca?access_token=eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE0MjIxMzEyMzUsInN1YiI... 'Host: x.x.x.x.:9345', 'Origin: http://x.x.x.x.:9345', 'Sec-WebSocket-Key: BN1n2BcCT/CUGh9MHeyL5g==', ...]
key = 'BN1n2BcCT/CUGh9MHeyL5g=='
header_str = 'GET /v1/stats/fff51e85-f2bb-4ace-8dcc-fde590932cca?access_token=eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE0MjIxMzEyMzUsInN1YiI6...3:9345
Origin: http://192.168.59.103:9345
Sec-WebSocket-Key: BN1n2BcCT/CUGh9MHeyL5g==
Sec-WebSocket-Version: 13

共有1个答案

阎作人
2023-03-14

很简单,服务并不希望令牌作为查询参数移交,而是希望它包含在请求的头中。

示例使用webSocket库从https://github.com/liris/websocket-client

def test_auth_token(token)
    header="Authorization: BEARER " + str(token)
    conn = create_connection("ws://<IP>:port"+ '/'+ container.uuid", header)
    result = conn.recv()
    assert result is not None
 类似资料:
  • 我成功地将Graph API用于各种事情,但我需要访问OneNote API来在班级笔记本上执行学生和教师的添加/删除操作。当我用https://www.OneNote.com资源请求一个令牌时,它提供了一个令牌,但当我试图使用它访问OneNote API时,无论发送什么(有效)请求,我都会得到401--“请求不包含有效的身份验证令牌”。 我的令牌请求: POST https://login.mi

  • 我正在编写一个用例,试图实现以下目标: > 使用OpenID Connect协议。规范在这里:(http://openid.net/specs/openid-connect-core-1_0.html) 使用以下命令调用/oauth2/access_令牌endpoint: a.对于资源身份验证:使用这是根据规范(https://datatracker.ietf.org/doc/html/draft

  • 使用OpenAM OpenID连接代理,我创建了一个名为Test-Client的OAuth 2.0/OpenID连接客户端,其作用域为openid。 我的OpenAM实例部署在Tomcat 7上,我调整了/etc/hosts文件,将localhost显示为OpenAM。实例通用域名格式。 使用默认凭据,我可以使用以下方式检索OpenID Connect id令牌: 然后,如果我的承载令牌仍然有效,

  • 目前在我的团队的web应用程序中,我们在一个名为Auth:“dfdfdf ...”的头中传递访问令牌.我们使用AWS Lambda和令牌授权器来访问我们的API网关资源。 还有一种不同类型的承载令牌头:授权:承载:通过Javascript发送授权令牌承载 区别是专有/命名,还是亚马逊的令牌授权人在功能上与承载令牌模式不同?

  • 我用的是角度和节点。js与Auth0一起登录。我正在使用《快速入门指南》启动API。这是我使用Auth0 API的后端。 使用Auth0通用登录登录后,我会尝试访问我的后端,查看我是否获得授权。 这是检查我是否被授权的代码。 注意,我没有传递任何东西(我想我需要传递,但Auth0指南没有告诉我)。 在检查我是否被授权后,我得到一个错误,没有找到授权令牌。不知道我在这里干什么。我的后端是否未正确连接

  • 我正在使用AzureAd Powershell模块进行用户管理。但是,它并不具备我所需要的所有功能,特别是,我不能为对象分配应用程序扩展值(尽管我可以通过创建删除和删除应用程序扩展本身)。 通过观察使用Fiddler的API调用,我知道graph调用使用了承载令牌,并且我直接从Postman手动调用了graph API,所以如果可以的话,我知道如何使用承载令牌。我怎么拿到?