Azure移动服务要求对SignalR HTML/Javascript客户端进行身份验证

Azure移动服务要求对SignalR HTML/Javascript客户端进行身份验证,azure,signalr,azure-mobile-services,Azure,Signalr,Azure Mobile Services,我有一个全新的Azure移动服务在本地运行:52253。我安装了最新的SignalR Nuget软件包:Azure移动服务.NET后端SignalR扩展1.0.450 我还从localhost:54697提供了一个测试HTML/Javascript客户端/ 在解决了CORs问题之后,我仍然无法连接到signalR集线器,因为signalR javascript客户端向localhost:52232/signalR/negotiate上的移动服务发出的协商请求总是导致HTTP/1.1 401未经授

我有一个全新的Azure移动服务在本地运行:52253。我安装了最新的SignalR Nuget软件包:Azure移动服务.NET后端SignalR扩展1.0.450

我还从localhost:54697提供了一个测试HTML/Javascript客户端/

在解决了CORs问题之后,我仍然无法连接到signalR集线器,因为signalR javascript客户端向localhost:52232/signalR/negotiate上的移动服务发出的协商请求总是导致HTTP/1.1 401未经授权

我没有在服务器上启用任何身份验证,一切都是默认设置。我还确认WebApi控制器在没有任何身份验证的情况下工作。我还尝试用以下内容装饰中心和所有中心方法:

[AuthorizeLevel(AuthorizationLevel.Anonymous)]
public class ChatHub : Hub
{
    public ApiServices Services { get; set; }

    [AuthorizeLevel(AuthorizationLevel.Anonymous)]
    public string Send(string message)
    {
        return "Hello from SignalR Chat Hub!";
    }
}
通过fiddler的确切请求是:

GET http://localhost:52253/signalr/negotiate?clientProtocol=1.4&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&_=1434677053589 HTTP/1.1 Host: localhost:52253 Connection: keep-alive Cache-Control: max-age=0 Accept: text/plain, */*; q=0.01 X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36 Content-Type: application/json; charset=UTF-8 Referer: http://localhost:52253 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 Cookie: ai_user=09b8290770484a41bec47ce63b379abf|2015-04-01T02:18:46.1194121+00:00; ai_session=ab23831e90cb4773b79353cd4e2963ff|2015-04-28T01:14:18.415Z|2015-04-28T01:52:17.864Z HTTP/1.1 401 Unauthorized Cache-Control: no-cache Pragma: no-cache Expires: -1 Server: Microsoft-IIS/10.0 X-Content-Type-Options: nosniff WWW-Authenticate: Basic realm="Service" X-SourceFiles: =?UTF-8?B?YzpcdXNlcnNca2Fsd2VfMDAwXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTNcUHJvamVjdHNcVGVzdFNpZ25hbFIuTW9iaWxlU2VydmljZVxUZXN0U2lnbmFsUi5Nb2JpbGVTZXJ2aWNlXHNpZ25hbHJcbmVnb3RpYXRl?= X-Powered-By: ASP.NET Date: Fri, 19 Jun 2015 04:32:28 GMT Content-Length: 0 得到http://localhost:52253/signalr/negotiate?clientProtocol=1.4&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&_=1434677053589 HTTP/1.1 主机:本地主机:52253 连接:保持活力 缓存控制:最大年龄=0 接受:文本/普通,*/*;q=0.01 X-request-With:XMLHttpRequest 用户代理:Mozilla/5.0(Windows NT 6.3;WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/43.0.2357.124 Safari/537.36 内容类型:application/json;字符集=UTF-8 推荐人:http://localhost:52253 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8 Cookie:ai_user=09b8290770484a41bec47ce63b379abf | 2015-04-01T02:18:46.1194121+00:00;ai|U session=ab23831e90cb4773b79353cd4e2963ff|2015-04-28T01:14:18.415Z|2015-04-28T01:52:17.864Z HTTP/1.1 401未经授权 缓存控制:没有缓存 Pragma:没有缓存 过期:-1 服务器:Microsoft IIS/10.0 X-Content-Type-Options:nosniff WWW-Authenticate:Basic-realm=“服务” X-SourceFiles:=?UTF-8?B?YZPCDXNLCNCA2FSD2VFMDAWXGRVY3VTZW50C1X2AXN1YWGC3ZGLLVIDIWMTNCUHJVAMVJDHNCVZDFNPZ25HBFIUTW9IAWXLU2VYDMLJZVXN0U2LNBMUI5NB2JPBGVTZZJ2AWNLXHNPZ25HBHJCBMVNB3RPYXRL= X-Powered-By:ASP.NET 日期:2015年6月19日星期五04:32:28 GMT 内容长度:0 然后浏览器弹出一个表单,要求进行基本身份验证,但我没有用户名或密码。这是在本地运行的,因此也没有Azure应用程序密钥


我如何在Azure Mobile Services上禁用或解决针对信号集线器集线器的此身份验证要求?

您看过这篇博文了吗

您可以通过以下方式全局设置授权:

public static void Register()
   {
       // Initialize SignalR
       SignalRExtensionConfig.Initialize();

       // Use this class to set configuration options for your mobile service
       ConfigOptions options = new ConfigOptions();
       options.SetRealtimeAuthorization(AuthorizationLevel.Anonymous);

       ...
   }

有时,我在将一个方法修饰为匿名之后,在AMS上也会遇到这种奇怪的问题。我通常做的是清除浏览器缓存或重新启动AMS,这是最有效的。你试过了吗?我觉得匿名真的不安全。使用authorizationlevel.application应该更好,可以满足大多数场景。(您确实希望确保使用您的API的人正在使用您的应用,不是吗?)希望这会有所帮助。您说得对,beast,我计划为生产添加身份验证。我现在想匿名快速开发和本地调试。再次感谢。你好。我最近研究了使用移动服务的信号员,发现我在协商请求时也遇到了一个问题。但就我而言,我找不到404。我正在使用生成的代理,我可以使用正确的hub方法查看hub文件。但是当我打电话给$.conneciton.hub.start时,我得到了一个关于协商请求的404。另一件有趣的事情是,我看到我的请求主机是javascript客户端ip地址:port/index.html。但您发布的示例是您的移动服务ip:port。我想我遗漏了一些明显的东西。希望你能帮忙:)我把问题解决了。我意识到我必须用$connection.hub.URL设置javascript客户端URL。但现在我遇到了CORs问题。我会想办法的。太棒了,谢谢。这是我需要的行:options.SetRealtimeAuthorization(AuthorizationLevel.Anonymous);克里斯,你能帮我吗