首页 > 解决方案 > 具有 Windows 身份验证的防伪令牌在初始页面加载时不起作用

问题描述

用于实现 Antiforgery的ASP.NET Core 文档指出:

使用 Windows 身份验证时,必须以与 cookie 相同的方式保护应用程序端点免受 CSRF 攻击。浏览器将身份验证上下文隐式发送到服务器,因此需要保护端点免受 CSRF 攻击。

使用下面的代码,Startup.cs初次访问网站时,后续的API请求不会通过。令牌似乎不包含所需的用户信息。只有在刷新页面后,令牌才会起作用。

public void ConfigureServices(IServiceCollection services)
{
    services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");
}

public void Configure(IApplicationBuilder app, IAntiforgery antiforgery)
{
    var allowedPaths = new [] { "/", "/index.html" };
    var requestPath = context.Request.Path.Value;

    app.Use(next => context =>
    {
        if (allowedPaths.Any(path => string.Equals(requestPath, path, StringComparison.OrdinalIgnoreCase)))
        {
            return next(context);
        }

        var tokens = antiforgery.GetAndStoreTokens(context);
        var options = new CookieOptions() { HttpOnly = false }
        context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, options);

        return next(context);
    });
}

这似乎有些合理,因为文档指出:

在通过将用户重定向到视图或 Razor 页面页面对用户进行身份验证后,应刷新令牌。

问题:使用时应该怎么做Windows Authentication?我找不到合适的例子。

标签: c#asp.net-corecsrfwindows-authenticationantiforgerytoken

解决方案


推荐阅读