我有一个在自托管应用程序上运行的webapi,通过oauth提供的安全性,我正在设置用于调用API的授权标头 . 这很好用,我们在所有电话上都有用户身份 .
现在,我可以通过查询字符串或cookie(或某些连接类型上的标头)将相同的授权令牌传递给signalr(在同一个应用程序中自托管) .
令牌到达服务器以获取信号器,我可以将其添加到context.cookie或标头中 .
但是..我可以通过它来创建一个经过身份验证的用户,我似乎被401错误所困扰
我假设我错过了一个代码的关键代码,它应该获取令牌并为signalr创建一个经过身份验证的用户(即使webapi / owin自己也这样做) .
有没有人有任何指针,或者信号器在自主机上与oauth一起工作的例子?
1 回答
您是正确的,您需要设置一种方法来验证和设置用户希望使用SignalR与OAuth .
您可以为SignalR创建客户AuthorizeAttribute . 在其中,您基本上可以获取查询字符串以获取令牌,一旦您拥有令牌,您可以取消保护它并开始验证它并在请求中设置用户上下文 .
我有一个例子
https://github.com/louislewis2/AngularJSAuthentication/blob/master/AngularJSAuthentication.API/SignalRHelpers/QueryStringBearerAuthorizeAttribute.cs
一旦实现,您只需使用[QueryStringBearerAuthorize]装饰您的集线器
github链接有一个完整的工作示例,可能会提供一些有 Value 的见解 .