【问题标题】:Blazor WA hosted - 401 Unauthorized on Azure AppServiceBlazor WA 托管 - Azure 应用服务上未授权 401
【发布时间】:2021-02-14 19:59:09
【问题描述】:

我有一个来自模板的简单 Blazor 应用程序。你可以在这里检查它:https://blazorfun2.azurewebsites.net/。 FetchData 页面仅适用于授权用户,但当我授权时,我得到401 Unauthorized error。在 Response 标头下显示此错误:

WWW-Authenticate: Bearer error="invalid_token", error_description="发行者 'https://blazorfun2.azurewebsites.net' 无效"

您可以使用testmail@testmail.somethingError#2 密码进行测试。

我在本地主机上没有这个错误。

我在 Linux 上使用 Azure 应用服务,dotnet 5.0。

可以通过更改IssuerUri (source) 来解决,但我想这不是最好的选择..

//Main method in Program.cs in Client: 
 var builder = WebAssemblyHostBuilder.CreateDefault(args);
 builder.RootComponents.Add<App>("#app");

 builder.Services.AddHttpClient("BlazorPlaygroundFun.ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
     .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();

 // Supply HttpClient instances that include access tokens when making requests to the server project
 builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>().CreateClient("BlazorPlaygroundFun.ServerAPI"));

 builder.Services.AddApiAuthorization();

 await builder.Build().RunAsync();
//startup.cs in server project:
services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(
        Configuration.GetConnectionString("DefaultConnection")));

services.AddDatabaseDeveloperPageExceptionFilter();

services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

services.AddIdentityServer()
    .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();

services.AddAuthentication()
    .AddIdentityServerJwt();

services.AddControllersWithViews();
services.AddRazorPages();

这里有什么问题?谢谢!

【问题讨论】:

  • 这是this 的副本吗?否则,你检查the other questions and answers on SO了吗?
  • 这些问题是相关的,是的。但不适用于 blazor,也不适用于只是模板的简单应用程序。
  • 您的问题解决了吗?有进展吗?

标签: c# azure azure-web-app-service blazor blazor-webassembly


【解决方案1】:

登录成功后,调用

var token = await TokenProvider.GetTokenAsync(); 

获取 jwt 令牌的方法。

然后在 Fetch Data 中,将 jwt 令牌带入 header,这将解决您的问题。

更多详情请查看相关帖子。

感谢enet的回答。

Blazor WebAssembly 401 Unauthorized even when I am authorized

【讨论】:

  • 更改发行人 uri 就像一个糟糕的选择。但这并不好 - 我必须编辑每个授权页面。我不明白为什么它只适用于本地主机..
猜你喜欢
  • 2022-06-22
  • 2012-04-29
  • 2020-10-08
  • 2023-03-23
  • 1970-01-01
  • 2020-04-17
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多