Azure 移动应用程序 MSA 身份验证困难
Azure Mobile App MSA Authentication Difficulties
所以我正在开展一个项目,将以前作为 Azure 移动服务托管的应用程序重新部署为 Azure 移动应用程序。所述应用程序有一个前端(在 Azure 中作为 Web 应用程序托管)和后端 API(这是移动应用程序),直接从前端 javascript 调用。在我开始处理 Microsoft 帐户身份验证部分之前,升级一直进行得很顺利。按照...
中的说明进行操作
...大部分时间都在滚动。我的应用程序已在 Microsoft 帐户开发人员中心注册,我指定了一个遵循 'https://{{my_backend_mobile_app_name}}.azurewebsites.net/.auth/login/microsoftaccount/callback' 格式的重定向 URI,我在 Azure 中使用我的移动应用程序的适当 blade 配置了 Microsoft Authentication/Authorization来自 Microsoft 帐户开发人员中心的 ClientId/Secret。当我测试它时,一切都很顺利:我可以转到我的应用程序的前端并单击 'Sign In' 按钮,一个新的 window 打开并显示提示我的 Microsoft Login.Live 站点使用 Microsoft 帐户登录,我成功登录并被重定向到 Microsoft 帐户开发人员中心指定的重定向 URL,它在查询字符串中附加了代码和状态值。
但是,当我被重定向时显示的页面有 'You do not have permission to view this directory or page'。如果我复制 URL,打开一个新选项卡,将其粘贴并按回车键,它会将我带到 'You have successfully signed in' 页面。但是这两种方式都不会让我回到我的应用程序的前端,它会让我登录并继续进入该站点,因为一切仍在为登录而打开的新 window 中发生。如果我关闭那个 window,身份验证过程将其视为登录的 'Cancelling',并要求我再次登录(只是重复上述过程)。如果我让 window 打开并返回到 window 我的前端站点,它仍在等待登录过程的响应。
所以这引出了我的主要问题:如何让 Microsoft 帐户身份验证过程实际 return 对我的前端站点的登录响应而不是登录 window?
旁注,我已将前端和后端的 SDK 从移动服务更新为移动应用程序。为此,我必须将 OWIN 中间件添加到我的后端应用程序中(根据上面 link #1 中的说明,在 'Updating the server project' header 下)。我目前的假设是,这个 OWIN 中间件没有正确配置身份验证,并且阻碍了回调正常工作;因此,我在摆弄 app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions());
部分。
根据您的描述,我假设您正在使用 Azure 移动应用程序的 JavaScript 客户端库。我在本地检查了这个问题,发现我可能会遇到与您提到的相同的问题,如下所示:
然后我尝试将它部署到 azure web 应用程序 (https://brucechen-mobile.azurewebsites.net/login.html),我发现它可以工作如下:
在网上搜索后,我发现了类似的 issue and refer to this blog 关于修复纹波问题。我登录到 Azure 门户并选择我的移动应用程序,然后单击 "All Settings > CORS",为我的本地 Web 应用程序添加 URL,如下所示:
然后,点击"SETTINGS > Authentication / Authorization",添加ALLOWED EXTERNAL REDIRECT URLS如下:
基于以上设置,它可以在我的本地端正常工作,如下所示:
所以我正在开展一个项目,将以前作为 Azure 移动服务托管的应用程序重新部署为 Azure 移动应用程序。所述应用程序有一个前端(在 Azure 中作为 Web 应用程序托管)和后端 API(这是移动应用程序),直接从前端 javascript 调用。在我开始处理 Microsoft 帐户身份验证部分之前,升级一直进行得很顺利。按照...
中的说明进行操作...大部分时间都在滚动。我的应用程序已在 Microsoft 帐户开发人员中心注册,我指定了一个遵循 'https://{{my_backend_mobile_app_name}}.azurewebsites.net/.auth/login/microsoftaccount/callback' 格式的重定向 URI,我在 Azure 中使用我的移动应用程序的适当 blade 配置了 Microsoft Authentication/Authorization来自 Microsoft 帐户开发人员中心的 ClientId/Secret。当我测试它时,一切都很顺利:我可以转到我的应用程序的前端并单击 'Sign In' 按钮,一个新的 window 打开并显示提示我的 Microsoft Login.Live 站点使用 Microsoft 帐户登录,我成功登录并被重定向到 Microsoft 帐户开发人员中心指定的重定向 URL,它在查询字符串中附加了代码和状态值。
但是,当我被重定向时显示的页面有 'You do not have permission to view this directory or page'。如果我复制 URL,打开一个新选项卡,将其粘贴并按回车键,它会将我带到 'You have successfully signed in' 页面。但是这两种方式都不会让我回到我的应用程序的前端,它会让我登录并继续进入该站点,因为一切仍在为登录而打开的新 window 中发生。如果我关闭那个 window,身份验证过程将其视为登录的 'Cancelling',并要求我再次登录(只是重复上述过程)。如果我让 window 打开并返回到 window 我的前端站点,它仍在等待登录过程的响应。
所以这引出了我的主要问题:如何让 Microsoft 帐户身份验证过程实际 return 对我的前端站点的登录响应而不是登录 window?
旁注,我已将前端和后端的 SDK 从移动服务更新为移动应用程序。为此,我必须将 OWIN 中间件添加到我的后端应用程序中(根据上面 link #1 中的说明,在 'Updating the server project' header 下)。我目前的假设是,这个 OWIN 中间件没有正确配置身份验证,并且阻碍了回调正常工作;因此,我在摆弄 app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions());
部分。
根据您的描述,我假设您正在使用 Azure 移动应用程序的 JavaScript 客户端库。我在本地检查了这个问题,发现我可能会遇到与您提到的相同的问题,如下所示:
然后我尝试将它部署到 azure web 应用程序 (https://brucechen-mobile.azurewebsites.net/login.html),我发现它可以工作如下:
在网上搜索后,我发现了类似的 issue and refer to this blog 关于修复纹波问题。我登录到 Azure 门户并选择我的移动应用程序,然后单击 "All Settings > CORS",为我的本地 Web 应用程序添加 URL,如下所示:
然后,点击"SETTINGS > Authentication / Authorization",添加ALLOWED EXTERNAL REDIRECT URLS如下:
基于以上设置,它可以在我的本地端正常工作,如下所示: