oauth-2.0 – 连接Auth令牌并将其传递给启用了CORS的SignalR集线
我有三个ASP.NET WebAPI端点:
>身份服务器,生成承载令牌(serverA.com); 所有三台服务器都使用OAuth2中间件作为Auth机制. Microsoft.Owin.Cors也已配置. 我可以成功地从serverC.com到serverA.com发出跨域请求来获取持有者令牌,但实际上,我不知道如何在连接到serverB.com时传递身份验证令牌 到目前为止,我发现了两种方法: >将auth令牌作为查询字符串传递(不安全); $.ajaxSetup({ 但它迫使SignalR仅使用长轮询. 是否有其他方式发送auth令牌(不在查询字符串中),以便OAauth BearerAuthorizationProvider可以使用和验证它?也许,饼干,标题或任何其他方式? 更新 为两个环境设置CORS中间件以允许所有数据并接受凭据. 这是我的OWIN中间件: var requestUri = context.Request.Uri.AbsolutePath; if (string.Equals(requestUri,authRoute,StringComparison.OrdinalIgnoreCase)) { if (!context.Request.Headers.ContainsKey("Authorization") || string.IsNullOrEmpty(context.Request.Headers["Authorization"])) { context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; } else { context.Response.Cookies.Append("BearerToken",context.Request.Headers["Authorization"]); } } else { await Next.Invoke(context); } 然后我做第一个Ajax请求: $.ajax({ url: self.communicationHubUrl + '/authenticate',type: 'post',cache: false,crossDomain: true,beforeSend: function(xhr) { xhr.setRequestHeader('Authorization',self.accessToken); }); 中间件将头部的auth令牌设置为响应cookie. 然后我调用hub.Start所以SignalR开始发送ajax请求. 但由于某些原因我不太明白,只有当我通过$.ajaxSetup为所有ajax请求启用xhr.withCredentials = true时才会在请求中出现cookie $.ajaxSetup({ xhrFields: { withCredentials: true } }); 如果没有此设置,请求不包含cookie.另一方面,我认为强制所有ajax请求启用此类设置并不是一个好的决定. 此外,我在Oauth中间件中遇到了奇怪的行为:当来自signalR的请求来到而不是401 Unauthorized时,我没有调用ValidateIdentity方法,我得到了聋人校长. 解决方法
我认为将认证令牌放入cookie是最好的选择.与ajaxSetup选项不同,cookie与EventSource和WebSocket请求一起发送.
您可能需要向SignalR服务器(serverB.com)添加一些中间件,以便在启动SignalR连接之前POST auth令牌时设置相应的cookie. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-2 – 未针对请求的URL配置默认文档,并且未在服
- entity-framework – 数据层中的IdentityUser
- asp.net – 存储DotNetOpenAuth信息和用户信息检索
- asp.net 上传或下载当文件名包含有特殊字符"#"的处理
- asp.net-mvc – ASP.NET MVC路由冲突 – 输入变量的null值
- asp.net-mvc – 在IE中拖放上传
- asp.net – 任何类似于蚂蚁分析器和免费的工具?
- asp.net-mvc – 用于枚举下拉列表的自定义MVC模板
- ASP.NET MVC 4和ExtensionlessUrlHandler
- asp.net-mvc – Mono上的ASP.NET MVC
- asp.net-mvc – WebApi是否支持开箱即用的applic
- asp.net-core – HttpResponse不包含Dot Net Cor
- asp.net – 无法从程序集’Elmah’加载’Elmah.E
- asp.net服务器负载均衡设置 – 它如何影响会话
- asp.net – 使用Roslyn动态编译控制器
- asp.net-mvc – 如何清除ASP.NET MVC应用程序中文
- asp.net-mvc – 升级到MVC 3:CS0103:名称’视图
- 在asp.net中替换撇号以防止SQL错误
- asp.net-mvc – ASP.NET MVC 3不显眼的客户端验证
- asp.net-mvc – ASP.NET MVC;使用EditorTemplate