Fresh Blazor Webassembly 模板 CLI v5.0.100 生成 "Unauthorized"
Fresh Blazor Webassembly Template CLI v5.0.100 produces "Unauthorized"
抱歉新手问题。
我真的需要了解这个新模板的解决方法是什么。
重现错误:
Visual Studio,全新的 Blazor 应用程序,名为“Demo3”
.NET 5.0,Blazor WebAssembly 应用程序,模板“CLI v5.0.100”
ASP.NET 核心托管,https
身份验证、单域、读取目录数据
运行 创建
我已经在以前的模板上做过数百次了。但是这个“新”模板立即产生了一个我无法弄清楚的错误。
详情:
正常登录
点击“获取数据”(天气预报)
我收到此错误消息。
关键字:401 和未授权。
我猜Unauthorized,是重要的信息。
info: System.Net.Http.HttpClient.Demo3.ServerAPI.ClientHandler[100]
Sending HTTP request GET https://localhost:44345/WeatherForecast
WeatherForecast:1 Failed to load resource: the server responded with a status of 401 ()
blazor.webassembly.js:1 info: System.Net.Http.HttpClient.Demo3.ServerAPI.ClientHandler[101]
Received HTTP response after 1272.7899ms - Unauthorized
blazor.webassembly.js:1 info: System.Net.Http.HttpClient.Demo3.ServerAPI.LogicalHandler[101]
End processing HTTP request after 1340.08ms - Unauthorized
blazor.webassembly.js:1 crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Response status code does not indicate success: 401 (Unauthorized).
System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode () <0x337bf70 + 0x00052> in <filename unknown>:0
at System.Net.Http.Json.HttpClientJsonExtensions.GetFromJsonAsyncCore[T] (System.Threading.Tasks.Task`1[TResult] taskResponse, System.Text.Json.JsonSerializerOptions options, System.Threading.CancellationToken cancellationToken) <0x32c6740 + 0x000f4> in <filename unknown>:0
at Demo3.Client.Pages.FetchData.OnInitializedAsync () [0x0003c] in D:\repos\nameofrepo\src\Demo3\Demo3\Client\Pages\FetchData.razor:48
at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync () <0x2c764b0 + 0x0013a> in <filename unknown>:0
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask (System.Threading.Tasks.Task taskToHandle) <0x2f401a8 + 0x000b6> in <filename unknown>:0
如错误所示,存在授权错误。
我的问题是:
有人找到这个错误的“官方 MS link”了吗?
或者,谁能解释一下哪里出了问题。
Follow-up
只是为了清楚起见,我没有更改或添加任何代码。测试运行是在模板完成后直接进行的。当然,我曾尝试调试错误并查看 AzureAD 中的设置,但没有成功。
第二个follow-up
调查了一个提示,评论中的 AADSTS7000218 细节。
所以我建立了一个项目。详情如下:
我改成红隼了。
我将 Azure App 设置更改为 SPA,具有相同的重定向地址。
为自己授予这两个应用程序的所有者权限。
将服务器添加到客户端应用程序的 api 权限。 "api://BlazorApp1_Server/user_impersonation"
已测试:同样的错误。
细节,我还是注意到了观众的细节
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Response status code does not indicate success: 401 (Unauthorized).
System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized).
并在响应中 headers:
www-authenticate: Bearer error="invalid_token", error_description="The audience 'api://blazorapp1_server' is invalid"
但没有关于 AADSTS7000218 或缺少客户端密码的信息。
仍然没有放弃...我会回来的...
我通过将“受众”值添加到服务器的 appsettings.json 文件
中设法解决了我的项目中的这个错误
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "<domain>",
"TenantId": "<guid>",
"ClientId": "api://<apiname>",
"CallbackPath": "/signin-oidc",
"Audience": "api://blazorapp1_server"
},
观众验证似乎区分大小写,如果 ClientId 包含大写字母并且不记名令牌中传递的观众值全部为小写,则观众验证失败。添加所有小写的受众价值为我解决了这个问题。
非常感谢!我遇到了同样的问题,您的 post 是解决问题的关键。
要补充的一件事:
Audience 的值是小写的 apiname:
"Audience": "api://<apiname in lowercase>"
我也试过只将 ClientID 更改为小写,但没有用。
除了在 appsettings.json 中为服务器添加“受众”外,我还必须调整服务器的应用程序注册,如下所示:
服务器平台必须是Web。
我还必须为客户端调整应用程序注册。
客户端的平台必须是 SPA,并且必须取消选择两种令牌类型:
我想插话说我今天真的很挣扎,Sascha Stops 的回答是正确的。非常感谢。
有一件事我想指出,随着 .NET 5 的发布和 Visual Studio 2019 的最新更新,现在有一个用于工作或学校帐户的 Blazor WebAssembly 模板(即 Azure AD验证)。我使用此模板创建了我的应用程序,并假设它会正确设置所有内容。它没有。
客户端应用程序注册将重定向 URI 设置为 Web 而不是 SPA。这是我遇到的第一个问题,在做了一些研究后不得不手动更改它。第二个问题是这里讨论的观众设置。我希望 Microsoft 尽快清理模板中的这些错误,因为我敢肯定会有很多困惑的开发人员。
抱歉新手问题。
我真的需要了解这个新模板的解决方法是什么。
重现错误:
Visual Studio,全新的 Blazor 应用程序,名为“Demo3”
.NET 5.0,Blazor WebAssembly 应用程序,模板“CLI v5.0.100”
ASP.NET 核心托管,https
身份验证、单域、读取目录数据
运行 创建
我已经在以前的模板上做过数百次了。但是这个“新”模板立即产生了一个我无法弄清楚的错误。
详情:
正常登录
点击“获取数据”(天气预报)
我收到此错误消息。
关键字:401 和未授权。
我猜Unauthorized,是重要的信息。
info: System.Net.Http.HttpClient.Demo3.ServerAPI.ClientHandler[100]
Sending HTTP request GET https://localhost:44345/WeatherForecast
WeatherForecast:1 Failed to load resource: the server responded with a status of 401 ()
blazor.webassembly.js:1 info: System.Net.Http.HttpClient.Demo3.ServerAPI.ClientHandler[101]
Received HTTP response after 1272.7899ms - Unauthorized
blazor.webassembly.js:1 info: System.Net.Http.HttpClient.Demo3.ServerAPI.LogicalHandler[101]
End processing HTTP request after 1340.08ms - Unauthorized
blazor.webassembly.js:1 crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Response status code does not indicate success: 401 (Unauthorized).
System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode () <0x337bf70 + 0x00052> in <filename unknown>:0
at System.Net.Http.Json.HttpClientJsonExtensions.GetFromJsonAsyncCore[T] (System.Threading.Tasks.Task`1[TResult] taskResponse, System.Text.Json.JsonSerializerOptions options, System.Threading.CancellationToken cancellationToken) <0x32c6740 + 0x000f4> in <filename unknown>:0
at Demo3.Client.Pages.FetchData.OnInitializedAsync () [0x0003c] in D:\repos\nameofrepo\src\Demo3\Demo3\Client\Pages\FetchData.razor:48
at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync () <0x2c764b0 + 0x0013a> in <filename unknown>:0
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask (System.Threading.Tasks.Task taskToHandle) <0x2f401a8 + 0x000b6> in <filename unknown>:0
如错误所示,存在授权错误。
我的问题是:
有人找到这个错误的“官方 MS link”了吗?
或者,谁能解释一下哪里出了问题。
Follow-up
只是为了清楚起见,我没有更改或添加任何代码。测试运行是在模板完成后直接进行的。当然,我曾尝试调试错误并查看 AzureAD 中的设置,但没有成功。
第二个follow-up
调查了一个提示,评论中的 AADSTS7000218 细节。
所以我建立了一个项目。详情如下:
我改成红隼了。
我将 Azure App 设置更改为 SPA,具有相同的重定向地址。
为自己授予这两个应用程序的所有者权限。
将服务器添加到客户端应用程序的 api 权限。 "api://BlazorApp1_Server/user_impersonation"
已测试:同样的错误。 细节,我还是注意到了观众的细节
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Response status code does not indicate success: 401 (Unauthorized).
System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized).
并在响应中 headers:
www-authenticate: Bearer error="invalid_token", error_description="The audience 'api://blazorapp1_server' is invalid"
但没有关于 AADSTS7000218 或缺少客户端密码的信息。
仍然没有放弃...我会回来的...
我通过将“受众”值添加到服务器的 appsettings.json 文件
中设法解决了我的项目中的这个错误 "AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "<domain>",
"TenantId": "<guid>",
"ClientId": "api://<apiname>",
"CallbackPath": "/signin-oidc",
"Audience": "api://blazorapp1_server"
},
观众验证似乎区分大小写,如果 ClientId 包含大写字母并且不记名令牌中传递的观众值全部为小写,则观众验证失败。添加所有小写的受众价值为我解决了这个问题。
非常感谢!我遇到了同样的问题,您的 post 是解决问题的关键。 要补充的一件事: Audience 的值是小写的 apiname:
"Audience": "api://<apiname in lowercase>"
我也试过只将 ClientID 更改为小写,但没有用。
除了在 appsettings.json 中为服务器添加“受众”外,我还必须调整服务器的应用程序注册,如下所示:
服务器平台必须是Web。
我还必须为客户端调整应用程序注册。
客户端的平台必须是 SPA,并且必须取消选择两种令牌类型:
我想插话说我今天真的很挣扎,Sascha Stops 的回答是正确的。非常感谢。
有一件事我想指出,随着 .NET 5 的发布和 Visual Studio 2019 的最新更新,现在有一个用于工作或学校帐户的 Blazor WebAssembly 模板(即 Azure AD验证)。我使用此模板创建了我的应用程序,并假设它会正确设置所有内容。它没有。
客户端应用程序注册将重定向 URI 设置为 Web 而不是 SPA。这是我遇到的第一个问题,在做了一些研究后不得不手动更改它。第二个问题是这里讨论的观众设置。我希望 Microsoft 尽快清理模板中的这些错误,因为我敢肯定会有很多困惑的开发人员。