【问题标题】:How do we preform OWIN oAuth Bearer token based Authentication and Authorization in SignalR?我们如何在 SignalR 中执行基于 OWIN oAuth Bearer 令牌的身份验证和授权?
【发布时间】:2014-12-19 07:23:13
【问题描述】:

我们使用内置的 OWIN oAuth 服务器功能来生成不记名令牌。我们让他们使用 ASP.NET Web API,但不确定如何让他们使用 SignalR(和 AngularJS javscript 客户端)。我们如何使用带有 SignalR 的 Bearer 令牌进行身份验证和授权?我还没有看到任何关于如何实现这一目标的非常好的明确答案。

提前致谢。

【问题讨论】:

    标签: javascript asp.net-mvc oauth-2.0 signalr owin


    【解决方案1】:

    很遗憾,JS WebSocket API 无法设置自定义标头。

    但是,应该可以将不记名令牌添加到包含 WebSocket 请求的query string of all SignalR requests。

    $.connection.hub.qs = { 'access_token' : accessToken };
    

    完成此操作后,您可以创建一个custom OAuthBearerAuthenticationProvider to pull the token from the querystring。

    【讨论】:

    • 使用自定义 qs 提供程序有效。但是一旦 websocket 连接被授权,它就不会过期。使用长轮询代替与 WebAPI 使用相同的标头并以相同的方式过期。
    • @halter73 这可行,但我有一个安全问题:读取查询字符串的攻击者知道 access_token。他不能用它来代表合法用户伪造请求吗?
    • @pomarc 正确。幸运的是,使用 HTTPS,查询字符串就像标头一样被加密。不过,你提出了一个很好的观点。有时查询字符串由服务器记录,而大多数标头则没有。这可能是避免将凭据放入查询字符串的原因之一。
    • @pomarc 我已经实现的解决此问题的方法是将 ip 地址作为声明添加到 access_token 中,然后在服务器上验证 access_token ip 地址是否与请求 ip 地址匹配。
    猜你喜欢
    • 2019-04-30
    • 1970-01-01
    • 2013-11-25
    • 2014-11-18
    • 2014-07-06
    • 2016-04-24
    • 2015-11-04
    • 1970-01-01
    • 2017-03-19
    相关资源
    最近更新 更多