簡體   English   中英

Blazor WebAssembly 調用受保護的 WebAPI 方法並中繼不記名令牌

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM