回调中的Azure移动应用程序身份验证403

atc*_*way 4 javascript authentication azure azure-mobile-services asp.net-core

我正在为客户端使用当前的Azure Mobile Apps SDKJavaScript并使用以下教程.我已经注册了所有主要提供商Azure,他们都包含他们的应用程序ID和秘密正确配置.我正在使用SDK中的样板代码来调用Azure Mobile Apps,并且提供程序登录(Twitter,Google,MSFT,FB)将在我的Web应用程序中弹出一个窗口并允许登录进行身份验证.身份验证有效.

问题是回调过程回到我的原始网络应用程序.我收到403 (Forbidden)错误,浏览器窗口中显示以下内容:

您无权查看此目录或页面.

以下是一些示例回调网址(为简洁起见,模糊处理的值)

自由软件
网址:htt
https://myservice.azurewebsites.net/.auth/login/google/callback?state=nonce%3Dc&authuser=0&session_state=4cf501&prompt=none#

问题是,如果我使用上面的任何完整URL并粘贴到新的浏览器窗口并进行调用,我会在浏览器中收到以下Azure消息:

您已成功登录

确定登录和身份验证有效,但看起来应用程序的回调失败了403 forbidden.以下是我尝试过的事情:

  1. 允许CORS在我的Azure Mobile Apps实例的服务器上的Azure配置中使用"*"来源
  2. CORS在我的ASP.NET CoreWeb应用程序中允许"*"来源
  3. 设置一个超级非限制性Content-Security-Policyindex.html

<meta http-equiv ="Content-Security-Policy" content="default-src * 'unsafe-inline'; script-src * 'unsafe-inline'; connect-src *; img-src *; style-src * 'unsafe-inline'">

这个过程和代码对我来说并不陌生.这一切都曾经在Azure Mobile Services现在已经退休的旧实例中工作Azure Mobile Apps(没有content-security-policy上述内容;我之前从未需要过).我认为这不是JavaScript代码问题,因为在WindowsAzure.MobileServiceClient调用时甚至不会从此进程返回promise .

有没有人知道什么阻止这个完整的过程完成并403 forbidden在成功进行身份验证后从提供程序登录窗口导致此过程?

更新:我在此创建了一篇博客文章,以帮助其他人并提供详尽的解释:配置Azure移动应用程序身份验证服务器端以与JavaScript客户端一起使用

小智 5

看起来这可能与您可以在门户中配置的重定向URL相关.看一下这个文档.在本地运行可能会导致问题,因为默认情况下,App Service身份验证仅配置为允许从Mobile App后端进行访问.使用以下步骤更改App Service设置以在本地运行服务器时启用身份验证:

  1. 登录Azure门户
  2. 导航到您的移动应用后端.
  3. 在"开发工具"菜单中选择"资源管理器".
  4. 单击"转到"以在新选项卡或窗口中打开Mobile App后端的资源管理器.
  5. 展开应用程序的config> authsettings节点.
  6. 单击"编辑"按钮以启用资源编辑.
  7. 找到allowedExternalRedirectUrls元素,该元素应为null.在数组中添加您的网址:

"allowedExternalRedirectUrls": [ "http://localhost:3000","https://localhost:3000"],

将数组中的URL替换为服务的URL,在本示例中为本地服务的http:// localhost:3000.您还可以使用http:// localhost:4400,具体取决于您的应用的配置方式.

  1. 在页面顶部,单击"读/写",然后单击"PUT"以保存更新.

您还需要将相同的环回URL添加到CORS白名单设置:

  1. 导航回Azure门户.
  2. 导航到您的移动应用后端.
  3. 单击API菜单中的CORS.
  4. 在空的允许的起源文本框中输入每个URL.将创建一个新文本框.
  5. 单击"保存"

后端更新后,您将能够在应用中使用新的环回URL.