C# OAuth令牌和自定义错误

C# OAuth令牌和自定义错误,c#,asp.net,oauth,C#,Asp.net,Oauth,在我的ASP.NET应用程序中,我通过以下方式覆盖了OAuthGrantResourceOwnerCredentials: public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { using (var userManager = _userManagerFactory()) { var user =

在我的ASP.NET应用程序中,我通过以下方式覆盖了OAuth
GrantResourceOwnerCredentials

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    using (var userManager = _userManagerFactory())
    {
         var user = await userManager.FindAsync(context.UserName, context.Password);

         if (user == null)
         {
             context.Rejected();
             context.SetError("invalid_grant", "Invalid username or password");
             return;
         }
令牌端点:

OAuthOptions = new OAuthAuthorizationServerOptions
        {
            AuthenticationMode = AuthenticationMode.Active,
            TokenEndpointPath = new PathString("/Token"),
它工作正常,我收到错误客户端:

responseText: "{"error":"invalid_grant"...ame or password"}"
responseJSON: Object { error="invalid_grant",  error_description="Invalid username or password"}
status: 400
statusText: "Bad Request"
现在,如果我尝试在
web.config
文件中配置自定义错误:

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="403" subStatusCode="-1"/>
  <remove statusCode="404" subStatusCode="-1"/>
  <remove statusCode="500" subStatusCode="-1"/>
  <error statusCode="403" path="/Error/Unauthorized" responseMode="ExecuteURL"/>
  <error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL"/>
  <error statusCode="500" path="/Error/ServerError" responseMode="ExecuteURL"/>
</httpErrors>
我认为自定义错误会影响所有请求并阻止预期行为

我试图在web.config中添加以下内容:

<location path="Token">
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough">
      <clear />
    </httpErrors>
  </system.webServer>
</location>

它可以在我的开发人员机器上使用
iisexpress
,但生产服务器上的
iis8.5
似乎忽略了它

您可以从下载示例项目。只需进入登录页面并按下登录按钮。我还评论了
web.config
文件


有人能给我指出正确的方向吗?

您是否尝试过在配置中设置existingResponse=“PassThrough”


经过几天的研究,我终于让它开始工作了

我已将覆盖配置更改为:

<location path="Token">
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough">
      <clear />
    </httpErrors>

  </system.webServer>
</location>

致:



有人能解释一下区别吗?

“它工作正常,我收到了客户端的错误消息。”您需要哪种错误代码和哪种JSON?我已经更新了问题。您能提供一个可验证的最小示例吗?这不是ASP.NET标识吗?我将准备一个示例项目。是,我正在使用asp.net标识。我已在覆盖配置中使用此配置:。问题是。。。为什么它在IIS 8.5中不起作用?不同的是,您以前用清除httpErrors,现在不再清除它们。很抱歉听到你被困住了:)发生了…:)
<location path="Token">
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough">
      <clear />
    </httpErrors>

  </system.webServer>
</location>
<location path="Token">
    <system.webServer>
       <validation validateIntegratedModeConfiguration="false" />

       <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough" />

    </system.webServer>
</location>