我已经基于最新的Microsoft模板编写了一个Blazor WASM应用程序。在开发模式下,一切都很好,但在将其发布到Azure应用程序服务后,我在调用API时随机获得401未经授权,查看返回的头,我得到
WWW-Authenticate: Bearer error="invalid_token", error_description="The issuer 'https://*domain*.azurewebsites.net' is invalid"
这是当客户端使用https://域.azurewebsites.net客户端时。因此它与网络API相匹配。
我还有一个附加到应用程序服务的自定义域,这意味着还有https://www.domain.co.uk和https://domain.co.uk都是SSL。
我已经检查了JWT令牌,它包含了我调用的网站版本的正确URL。
有时一切正常,但60%的时间它允许用户登录,然后在API调用中失败。我似乎无法将其跟踪到1个域名或类似过期登录的模式。如果您先注销,然后再重新登录,这并不能解决问题。
配置看起来像这个
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseWebAssemblyDebugging();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseHttpsRedirection();
app.UseBlazorFrameworkFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseIdentityServer();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
}
感谢任何正确方向的帮助或提示
干杯
Dave
在我的案例中,它是由应用程序服务的Linux环境引起的。现在文档对此有了明确的说明:CCD_ 1。
我就是这样设置的:
services.Configure<JwtBearerOptions>(
IdentityServerJwtConstants.IdentityServerJwtBearerScheme,
options =>
{
options.Authority = "https://my-site.azurewebsites.net";
#if DEBUG
options.Authority = "https://localhost:5001";
#endif
});