使用访问令牌安全地进行身份验证

时间:2019-06-18 14:50:48

标签: c# angular websocket .net-core signalr

我们有一个Angular / TypeScript应用程序,该应用程序使用SignalR Web套接字技术连接到我们的C#.NET Core API。为了进行身份验证,我们将发送JWT访问令牌,然后可以检索该令牌并检查API。实际上,这很好。

但是,问题是Web套接字JavaScript客户端最初用于连接到API的方法公开了我们在GET请求中的访问令牌。 Web服务器访问日志,负载平衡器访问日志,代理日志和其他常见的企业工具(例如性能分析平台)可以存储HTTP GET方法请求的敏感信息。下面是我们用于连接的代码。

在前端:

this._hubConnection = new HubConnectionBuilder()
  .withUrl(this.apiPath + ?authtoken=${localStorage.getItem('access_token')})
  .build();

在后端:

if (context.Request.Path.Value.StartsWith("/hub") && 
context.Request.Query.TryGetValue("authtoken", out 
Microsoft.Extensions.Primitives.StringValues token))
{
    context.Token = token;
}

这会将我们的访问令牌直接扔到GET请求的查询字符串中,以供所有人查看。

我们尝试了其他解决方案(如下),但仍然存在相同的问题。 Here是一个链接,指向某人的解释,其中解释了Web socket JavaScript客户端当前不支持自定义标头。有什么办法解决这个问题?我们需要发送访问令牌,而不会使其暴露于危险之中。

this._hubConnection = new HubConnectionBuilder()
  .withUrl(this.apiPath, { accessTokenFactory: () => localStorage.getItem('access_token') })
  .build();

0 个答案:

没有答案