如何自定义oauthauthorizationserverprovider错误信息?

We are using the OAuthAuthorizationServerProvider class to do authorization in our ASP.NET Web Api app.

If the provided username and password is invalid in GrantResourceOwnerCredentials, the call

context.SetError( "invalid_grant", "The user name or password is incorrect." );

Produces the following Json result:

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

Is there any way to customize this error result?
I would like to make it consistent with default error message format used in other parts of the API:

{
"message": "Some error occurred."
}

Is this possible to achieve with the OAuthAuthorizationServerProvider?

2016年10月12日24分24秒

This is how I did it.

string jsonString = "{\"message\": \"Some error occurred.\"}";

// This is just a work around to overcome an unknown internal bug.
// In future releases of Owin, you may remove this.
context.SetError(new string(' ',jsonString.Length-12)); context.Response.StatusCode = 400;
context.Response.Write(jsonString);

2016年10月11日24分24秒

+1 for Dasun's answer. Here is how I extended it a bit further.

public class ErrorMessage
{
public ErrorMessage(string message)
{
Message = message;
} public string Message { get; private set; }
} public static class ContextHelper
{
public static void SetCustomError(this OAuthGrantResourceOwnerCredentialsContext context, string errorMessage)
{
var json = new ErrorMessage(errorMessage).ToJsonString(); context.SetError(json);
context.Response.Write(json);
}
}

The .ToJsonString() is another extension method that uses the Newtonsoft.Json library.

public static string ToJsonString(this object obj)
{
return JsonConvert.SerializeObject(obj);
}

Usage:

context.SetCustomError("something went wrong");
上一篇:分针网—IT教育:作为PHP开发人员容易忽视的几个重点


下一篇:nodejs 实践:express 最佳实践(三) express 解析