blazor - 对于 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
}
}
注意到我添加了RedirectUri和PostLogoutRedirectUri值,因为我一直在谷歌搜索和交叉引用以尝试找出可行的方法!此外,当我将解决方案移动到 Azure(删除 Prod 位并将 Dev 添加到其他两个)时,这两个条目RedirectUriProd和PostLogoutRedirectUriProd值是使用的。
在 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 时,会发生两件事:
- 从 PC 通过其链接访问静态 Web 应用程序时,我可以登录,但如果我尝试注销,则会显示 HTTP 404 错误屏幕。 在此处输入图像描述
- 当我尝试从我的手机访问相同的链接(例如,浏览器无关紧要)时,我得到了应用程序,但是如果我点击“登录”,屏幕会显示“检查登录状态”,紧随其后的是 HTTP 404错误。
从电话尝试检查 URL,静态应用程序正试图转到:
https://https://{generated domain prefix}.azurestaticapps.net/authentication/login-callback#state={code}&client_info={code}&code={code}
这把我带到了这里——我不知所措。我不明白为什么会发生带有重定向的两个事件,因为据我所知,一切都是“应该”工作的。我一直在广泛搜索以尝试找到解决方案,因为我正在查看静态 Web 应用程序(通常是无服务器)似乎是正确的匹配项。事实上,我一直在玩的 Blazor 应用程序一直在工作,PC 和移动设备。现在正是这个身份验证位让我感到难过。
任何指导表示赞赏
解决方案
检查您在 Azure 中的配置,我认为问题出在您login-callback
在门户中的配置中。
推荐阅读
- java - 为什么HDFS FileNotFoundException:文件不存在?
- java - 模拟访问内部创建的对象验证
- python - 如何在 Selenium Python 中获得类似人类的鼠标点击?
- r - 闪亮的小部件小于应用程序宽度,我如何使两边的填充不是白色的?
- html - 内容未在移动视图的页面上向下推页脚
- c# - 如何在一种方法中为数组赋值并从另一种方法调用
- node.js - 打字稿阻止出口在全球范围内可用?
- python - 在 python (pandas.DataFrame) 中,是否有一种简单/有效的方法来创建每个索引中一列的所有可能组合,按值评分?
- html - Css 没有反映在 html 中
- python - resnet50 理论问题 - 输出形状和密集层单元?