首页 > 解决方案 > 对于 Azure 托管的静态 Web 应用程序 (Blazor),为什么在从移动浏览器查看 URL 时 RedirectURI 和 PostLogoutRedirectUri 不起作用

问题描述

第一次提问者 - 长期搜索者。我已经花了一周左右的时间试图理解为什么某些东西在本地工作(使用 localhost:XXXX)但在发布到 Azure 时却不能工作。

设置

托管在标准 Azure 租赁中的静态 Web 应用程序和 B2C 租赁已创建以提供用户身份验证。正在使用的代码是 Microsoft 提供的 Blazor WASM 示例之一=> https://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/standalone-with-azure-active-directory-b2c ?view=aspnetcore-3.1

构建过程使用 git-hub 和 Azure 内置功能在 github Pull 发生时推送到 Azure Tenancy 主机。静态 Web 应用程序有一个标准托管计划,而不是免费选项。

我从默认值改变了什么

我创建了一个 Visual Studio 解决方案,将模板下载到一个名为Client的项目中,并在解决方案中包含了一个API项目(即形成一个 Microsoft 静态 Web 应用程序)。

appsettings.json 文件修改如下:

    {
  "AzureAdB2C": {
    "Authority": "https://{domain}.b2clogin.com/{domain}.onmicrosoft.com/B2C_1_signupsignin1",
    "ClientId": "{Application ID GUID",
    "RedirectUri": "https://localhost:XXXXX/authentication/login-callback",
    "PostLogoutRedirectUri": "https://localhost:XXXXX/authentication/logout-callback",
    "RedirectUriProd": "https://{generated domain prefix}.azurestaticapps.net/authentication/login-callback",
    "PostLogoutRedirectUriProd": "https://{generated domain prefix}.azurestaticapps.net/authentication/logout-callback",
    "ValidateAuthority": false
  }
}

注意到我添加了RedirectUriPostLogoutRedirectUri值,因为我一直在谷歌搜索和交叉引用以尝试找出可行的方法!此外,当我将解决方案移动到 Azure(删除 Prod 位并将 Dev 添加到其他两个)时,这两个条目RedirectUriProdPostLogoutRedirectUriProd值是使用的。

在 Program.cs 中,用于身份验证的是 MSAL,并添加了 openid 和 offline_access 以进行良好的衡量(再次 - 谷歌搜索并尝试了解正在发生的事情)。

            builder.Services.AddMsalAuthentication(options =>
            {
                builder.Configuration.Bind("AzureAdB2C", options.ProviderOptions.Authentication);
                options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
                options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
            });

有了这个配置,当我在本地访问解决方案时 - 没问题。当我升级到 Azure 时,会发生两件事:

  1. 从 PC 通过其链接访问静态 Web 应用程序时,我可以登录,但如果我尝试注销,则会显示 HTTP 404 错误屏幕。 在此处输入图像描述
  2. 当我尝试从我的手机访问相同的链接(例如,浏览器无关紧要)时,我得到了应用程序,但是如果我点击“登录”,屏幕会显示“检查登录状态”,紧随其后的是 HTTP 404错误。

从电话尝试检查 URL,静态应用程序正试图转到:

https://https://{generated domain prefix}.azurestaticapps.net/authentication/login-callback#state={code}&client_info={code}&code={code}

这把我带到了这里——我不知所措。我不明白为什么会发生带有重定向的两个事件,因为据我所知,一切都是“应该”工作的。我一直在广泛搜索以尝试找到解决方案,因为我正在查看静态 Web 应用程序(通常是无服务器)似乎是正确的匹配项。事实上,我一直在玩的 Blazor 应用程序一直在工作,PC 和移动设备。现在正是这个身份验证位让我感到难过。

任何指导表示赞赏

标签: blazorazure-ad-b2c

解决方案


检查您在 Azure 中的配置,我认为问题出在您login-callback在门户中的配置中。


推荐阅读