Blazor WA 托管 - Azure 应用服务上未授权 401
Posted
技术标签:
【中文标题】Blazor WA 托管 - Azure 应用服务上未授权 401【英文标题】:Blazor WA hosted - 401 Unauthorized on Azure AppService 【发布时间】: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.something
和Error#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,也不适用于只是模板的简单应用程序。 您的问题解决了吗?有进展吗? 【参考方案1】:登录成功后,调用
var token = await TokenProvider.GetTokenAsync();
获取 jwt 令牌的方法。
然后在 Fetch Data 中,将 jwt 令牌带入 header,这将解决您的问题。
更多详情请查看相关帖子。
感谢enet的回答。
Blazor WebAssembly 401 Unauthorized even when I am authorized
【讨论】:
更改发行人 uri 就像一个糟糕的选择。但这并不好 - 我必须编辑每个授权页面。我不明白为什么它只适用于本地主机..以上是关于Blazor WA 托管 - Azure 应用服务上未授权 401的主要内容,如果未能解决你的问题,请参考以下文章
当 Azure 应用服务上的“仅 HTTPS”选项处于打开状态时,无法切换 Blazor 应用(在同一托管下)
多个 Blazor 应用程序,相同的托管。从第一个应用程序重定向到第二个应用程序。 Azure 应用服务
如何在 Azure DevOps 上为发布服务器项目而不是客户端的 Blazor WebAssembly 托管应用程序创建构建管道?