Asp.net core mvc 如何从IdentityServer 3发布反伪造令牌

Asp.net core mvc 如何从IdentityServer 3发布反伪造令牌,asp.net-core-mvc,identityserver3,antiforgerytoken,Asp.net Core Mvc,Identityserver3,Antiforgerytoken,我正在使用IdentityServer 3进行身份验证。当用户通过身份验证时,IdentityServer向客户端的应用程序url发出“POST”请求。例如,到目前为止一切都很好 我的客户端应用程序是在ASP.NET内核中开发的。在客户端应用程序中,我希望验证每个POST请求。因此,我没有在每个操作方法上添加ValidateAntiForgeryToken属性,而是创建了一个中间件来验证每个POST请求 public class ValidateAntiForgeryTokenMiddlewar

我正在使用IdentityServer 3进行身份验证。当用户通过身份验证时,IdentityServer向客户端的应用程序url发出“POST”请求。例如,到目前为止一切都很好

我的客户端应用程序是在ASP.NET内核中开发的。在客户端应用程序中,我希望验证每个POST请求。因此,我没有在每个操作方法上添加
ValidateAntiForgeryToken
属性,而是创建了一个中间件来验证每个POST请求

public class ValidateAntiForgeryTokenMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IAntiforgery _antiforgery;

    public ValidateAntiForgeryTokenMiddleware(RequestDelegate next, IAntiforgery antiforgery)
    {
        _next = next;
        _antiforgery = antiforgery;
    }

    public async Task Invoke(HttpContext httpContext)
    {
        if (httpContext.Request.Method.ToUpper() == "POST")
        {
            await _antiforgery.ValidateRequestAsync(httpContext);
        }

        await _next(httpContext);
    }
}
这里的问题是,由于identityserver也在进行POST,中间件尝试验证该请求,但POST请求失败,出现以下错误

“所需的防伪饼干 \“.AspNetCore.Antiforgery.AXelvXewLHI\”不存在。”

在Identity Server中,我有自定义登录页面。我已经在登录页面配置了防伪令牌

<div ng-show="model.loginUrl">
    <div class="cr-login-dialog col-md-6 col-md-offset-3">
        <form name="form" method="post" action="{{model.loginUrl}}" class="form-horizontal" role="form">
            <anti-forgery-token token="model.antiForgery"></anti-forgery-token>
            <div class="form-group">
                //user name controls goes here
            </div>
            <div class="form-group">
                //password controls goes here
            </div>
            <div class="form-group" ng-show="model.allowRememberMe">
                // remember me controls goes here
            </div>
        </form>
    </div>
</div>

//用户名控件位于此处
//这里有密码控制
//记住我这里有控制装置

您应该将反xsrf中间件分离出来,只在您的请求上运行,而不是对IdentityServer的请求。IdentityServer执行与MVC实现无关的反xsrf令牌(因为IdentityServer不依赖MVC)。

您应该分离出反xsrf中间件,仅在您的请求上运行,而不是在对IdentityServer的请求上运行。IdentityServer有自己的反xsrf令牌,与MVC的实现无关(因为IdentityServer不依赖MVC)。

这就是问题所在。中间件无法区分
POST
请求是来自IdentityServer还是来自用户浏览器。然后使用MW作为实现位置不是正确的选择。
您应该分离出您的反xsrf中间件,仅在您的请求上运行,而不是在对IdentityServer的请求上运行。
。请注意,中间件将尝试验证来自identityserver的请求。我希望identity POST antiforgery token重定向到客户端应用程序的起始页,这就是问题所在。中间件无法区分
POST
请求是来自IdentityServer还是来自用户浏览器。然后使用MW作为实现位置不是正确的选择。
您应该分离出您的反xsrf中间件,仅在您的请求上运行,而不是在对IdentityServer的请求上运行。
。请注意,中间件将尝试验证来自identityserver的请求。当identity POST antiforgery令牌重定向到客户端应用程序的起始页时,我想要它