[英]Blazor WebAssembly invoking protected WebAPI methods and relaying bearer token
我有一个在 localhost:5002 上运行的宁静服务,5000 上的身份服务器和 localhost:1330 上的 Blazor WebAssembly 应用程序。 他们可能不在同一个域上。
我可以使用我的 Blazor WebAssembly 应用程序(客户端而不是服务器)进行身份验证,这反过来又调用 WebApi 方法,我得到返回,401 未授权。 我已经手动将不记名令牌添加到请求中,它可以完美地返回结果等。
HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "{{BEARER TOKEN VALUE}}");
我的主要问题是。 获取 Bearer 令牌并将其传递的最佳方式是什么?
IMO 最好的方法是使用IHttpClientFactory
并使用内置的BaseAddressAuthorizationMessageHandler
分配令牌
设置 DI
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddOidcAuthentication<RemoteAuthenticationState, RemoteUserAccount>(options =>
{
options.ProviderOptions.Authority = "http://localhost:5000";
options.ProviderOptions.ClientId= "{YOUR CLIENT ID}";
options.ProviderOptions.RedirectUri= "http://localhost:1330/authentication/login-callback";
})
.AddHttpClient("apiClient")
.ConfigureHttpClient(httpClient =>
{
httpClient.BaseAddress = "http://localhost:5002";
})
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
await builder.Build().RunAsync();
}
}
通过注入IHttpClientFactory
在组件或服务中使用
组件样本
@inject IHttpClientFactory _factory
@code {
protected override async Task OnInitializedAsync()
{
var client = _factory.CreateClient("apiClient")
var data = await client.GetJsonAsync<Data>("api/data");
}
}
有多种使用IHttpClientFactory
的方法,请阅读使用 IHttpClientFactory 实现弹性 HTTP 请求以获取更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.