繁体   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