C# OAuth令牌和自定义错误
在我的ASP.NET应用程序中,我通过以下方式覆盖了OAuthC# 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 =
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>