簡體   English   中英

Blazor wasm cookie認證

[英]Blazor wasm cookie authentication

我正在開發 blazor wasm 應用程序,並希望在 WebApi(不同的基本 url)上進行身份驗證。 我的問題是 blazor HttpClient 不尊重服務器發送的 cookies 。 你有任何提示/想法如何解決這個問題嗎?

在下面的代碼中,我試圖附加我通過第一個請求從服務器獲得的 cookie(成功身份驗證)

圖形.cs

    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("#app");

        builder.Services.AddScoped<CustomDelegatingHandler>();

        builder.Services.AddHttpClient("ServerAPI", client => client.BaseAddress = new Uri("https://test.myserver.com")).AddHttpMessageHandler<CustomDelegatingHandler>();

        builder.Services.AddScoped<IHttpService, HttpService>();

        builder.Services.AddScoped<ILoginService, LoginService>();
        builder.Services.AddScoped<ISuncenterService, SuncenterService>();

        await builder.Build().RunAsync();
    }

CustomDelegatingHandler.cs 看起來像這樣

    private readonly IJSRuntime JSRuntime;
    public CustomDelegatingHandler(IJSRuntime jSRuntime) : base()
    {
        JSRuntime = jSRuntime;
    }

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        const string prm = "cookie";
        string cookie = await JSRuntime.InvokeAsync<string>("blazorExtensions.GetCookie", new[] { prm 
  });
        Console.WriteLine($"{prm}: {cookie}");
        request.Headers.Add(prm, cookie);
        return await base.SendAsync(request, cancellationToken);
    }

您需要在請求上設置憑據選項。 正如 MDN 鏈接所解釋的,憑據選項控制瀏覽器是否在跨域請求上發送 cookies - 例如對您的(不同的基本 url)WebAPI 的請求:

Request 接口的 credentials 只讀屬性指示在跨域請求的情況下,用戶代理是否應該從其他域發送 cookies。

對請求執行此操作的 C# 方法是:

request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include);

該選項的三個選項是 Omit、SameOrigin 或 Include:

Omit建議瀏覽器永遠不要發送憑據(例如 cookies 或 HTTP 身份驗證標頭)。

僅當目標 URL 與調用應用程序位於同一源時, SameOrigin建議瀏覽器發送憑據(例如 cookies 或 HTTP 身份驗證標頭)。

Include建議瀏覽器發送憑據(例如 cookies 或 HTTP 身份驗證標頭),即使對於跨域請求也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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