【发布时间】:2014-03-26 06:43:28
【问题描述】:
我已按照指南进行操作:
Getting Started with Authentication with Mobile Services .NET for Windows Store
只要我不需要对用户进行身份验证,我就可以在本地运行该服务。如果我将服务发布到 Azure,我还可以对用户进行身份验证。但我希望能够在本地测试 和 对用户进行身份验证。如何做到这一点?
我正在使用 Live ID,并且在 Web.config 中设置了正确的 ClientID 和 ClientSecret。当我尝试从客户端调用 LoginAsync 时,调用失败,请求无法完成。 (方法不允许)
** 2014-03-20 更新 **
根据 Carlos 和 Henrik 的 cmets,我更新了我的本地服务,使其看起来 完全 像我的服务器实例。我关注了 Scot Hanselmans excellent guide,现在我的服务在端口 80 和 端口 443 上本地运行,并具有完全有效的 SSL 证书。它甚至在完全相同的 https://xxxx.azure-mabile.net 主机名上运行。
通过这些更改,现在在我的本地计算机上运行应用程序或在 Azure 上运行应用程序之间没有任何配置差异。我可以在浏览器中转到 https://xxxx.azure-mabile.net,重定向到 Live login,登录,然后成功重定向回服务。在浏览器中一切正常。但是它仍然在应用程序中不起作用。
我附加了调试器,将 CLR 错误设置为“抛出时中断”,并设法在服务中捕获异常。这是我在即时窗口中看到的内容:
Response 属性没有帮助。它没有提供有关该问题的任何其他信息。
唯一让我印象深刻的是,该应用正在尝试向 /login/microsoftaccount 执行 POST,而浏览器通常会执行 >GET 在这个地址(然后被重定向)。
** 更新 #2 2014-03-20 **
按照remote debugging 的 Henriks 指南后,我能够加载符号并获得 tiny 更多信息:
“现有连接被远程主机强行关闭”
错误代码是 10054 (WSAECONNRESET) Connection reset by peer。
看起来实时身份验证服务器可能会强制终止连接,但仅在我使用应用程序进行身份验证时。同样,浏览器中的身份验证很好。这一点,再加上 /login/microsoftaccount 是来自应用程序的 POST,这似乎表明我从 LiveClient.LoginAsync 返回的身份验证令牌存在问题。我会做更多的挖掘......
【问题讨论】:
-
如果您在浏览器中尝试使用
https://而不是http://登录,它仍然有效吗?如果我没记错的话,Windows 8 应用程序中的身份验证需要通过 HTTPS 完成。 -
谢谢卡洛斯。这似乎没有解决它。我已经更新了上面的问题,并且我已经在端口 443 上使用有效的受信任证书在本地完全启用了 HTTPS。还是不行。
-
我也试过这个,但没有运气。我还配置了对 issexpress link 的外部访问,在 web.config 中输入了客户端密钥和客户端密码,并将客户端和服务器 URL 添加到谷歌的开发人员仪表板中。 Fiddler 显示“invalid_client”。