C# OAuth OWIN : return custom response when invalid credentials provided to Token endpoint?

标签 c# asp.net oauth owin

我有一个 Web API 项目,它通过 OAuthAuthorizationServerProvider 实现身份验证。我已经对提供者进行了子类化,并根据需要实现了方法来实现我自己的身份验证系统。

我还想出了如何覆盖为未经身份验证的请求提供的返回值(您必须子类化 AuthorizeAttribute 类,然后使用您的自定义属性而不是 Authorize您打算保护的端点)。

我还可以覆盖我的 OAuth 身份验证服务器提供程序中的 TokenResponse 方法,以更改包含 token 的响应。

现在我要做的是在用户向 token 端点提供不正确 凭据时覆盖 token 端点提供的响应。现在,我只是明白了:

{"error":"invalid_grant","error_description":"The user name or password is incorrect."}

我知道此文本的来源 - 在我的 GrantResourceOwnerCredentials 方法中,如果请求未通过身份验证,我会执行以下操作:

if (!isValidUser)
{         
    context.SetError("invalid_grant", "The user name or password is incorrect.");
    return;
}

相反,我希望能够完全操纵当用户提供不正确的凭据时返回的 Response 对象。

例如,我可能希望将返回值设置为如下所示:

{"error":401,"timestamp":1234567890,"message":"Those credentials are wrong. Try again."}

有没有办法覆盖服务器在失败 身份验证时提供的响应?

最佳答案

您无法更改此行为。您只能在 context.SetError() 方法中更改字段。

在这种情况下,响应(包括状态代码)由 SendErrorAsJsonAsync() 私有(private)方法组成,在 OAuthAuthorizationServerHandler 内内部类,在 Microsoft.Owin.Security.OAuth dll 中。

您可以修改OAuthAuthorizationServerHandler中的代码类了解更多详情。

关于C# OAuth OWIN : return custom response when invalid credentials provided to Token endpoint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38274045/

相关文章:

c# - 在 C# 中将时间转换为十进制

c# - 任务类无法获取正确的值

asp.net - 使用 asp :HiddenField value in JavaScript on page load?

asp.net-mvc - 我可以在没有成员身份的情况下创建 ASP.NET 用户吗?

rest - 如何设置OAuth1.0a的授权 header

c# - 将音频(字节数组)发布到 MVC.NET Web Api

c# - 如何从具有 EF 模型的程序集中获取 csdl、ssdl 和 msl 规范

asp.net - 使用 AspNet.Web.Optimization 的 Bootstrap Javascript 的 CDN 故障转移

javascript - asp.net Web 服务和 json 结果中的额外报价!

java - 未知的授权 header - 错误 401