我正在我的 Web API2 服务器(在 IIS 下运行)中实现基于 OAuth 令牌的安全性
我正在使用提供OAuthAuthorizationServerProvider
等的各种中间件,这些中间件采用从BaseValidatingContext
派生的各种参数
例如,我有以下代码片段...
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var result = await GetAuthenticateAndGetClaimsAsync("dummy", context.UserName, context.Password);
if (result.HasError)
{
context.SetError("Error code", "Error description);
return;
}
对context.SetError("Error code", "Error description);
的调用将使响应的正文具有以下内容。
{
"error": "Error code",
"error_description": "Error description
}
我想更改这些字段的名称以反映我在应用程序其他地方使用的错误,因此我可以有类似的东西。
{
"code": "Error code",
"message": "Error description
}
这可能吗,如果是,我该怎么做?
能够自己设置状态代码可能也很好,但这并不重要,我想更改的更多是上述字段。
提前感谢您的任何建议。
尝试创建自定义错误对象,然后可能使用一种方法(扩展方法)将AspNEt的错误映射到您的错误..有些像:
public class MyCustomError{
public string Code {get; set;}
public string Message {get; set;}
}
然后你可以创建
public static class ErrorManager{
public static ToMyCustomError(this Error err){ //<-- set Here the CORRECT TYPE RETURNING FROM context.SetError
return new MyCustomError{
Code = err.error;
Message=err.error_description;
}
}
}
然后你可以像这样使用:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var result = await GetAuthenticateAndGetClaimsAsync("dummy", context.UserName, context.Password);
if (result.HasError)
{
return context.SetError("Error code", "Error description).ToMyCustomError();
}
}