要解决Blazor WASM Hosted中在API上进行授权始终返回未经授权的问题,可以按照以下步骤进行操作:
Program.cs
文件中的 Main
方法中添加以下代码:builder.Services.AddAuthorizationCore();
builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddHttpClient("ApiName", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler();
builder.Services.AddScoped(sp => sp.GetRequiredService().CreateClient("ApiName"));
builder.Services.AddOidcAuthentication(options =>
{
builder.Configuration.Bind("oidc", options.ProviderOptions);
});
上述代码中,ApiAuthenticationStateProvider
是自定义的身份验证状态提供程序,ApiAuthorizationMessageHandler
是处理API授权的消息处理程序。
Startup.cs
文件中,确保已正确配置身份验证和授权中间件。可以在 ConfigureServices
方法中添加以下代码:services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "https://localhost:5001";
options.Audience = "ApiName";
});
services.AddAuthorization(options =>
{
options.AddPolicy("ApiScope", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireClaim("scope", "ApiName");
});
});
上述代码中,ApiName
是API的名称,可以根据实际情况进行修改。
[Authorize]
属性进行标记。例如:[HttpGet]
[Authorize(Policy = "ApiScope")]
public async Task>> Get()
{
// API逻辑
}
上述代码中,使用了 ApiScope
策略进行授权,只有具有正确的令牌和范围的用户才能访问该端点。
通过以上步骤,你应该能够解决Blazor WASM Hosted中API授权始终返回未经授权的问题。请确保在配置和代码中使用了正确的名称和参数,并根据实际情况进行修改。