在.net的webapi中,如果使用oauth2.0来做授权访问,会遇到如下问题:
1)无法自定义授权错误信息,比如如果密码错误,显示如下错误:
{
"error": "invalid_grant",
"error_description": "用户名或密码不正确。"
}但这里我其实想提示的错误,和返回由我自己定义,比如我们返回:
{
"ResultCode":-1,
"ErrorMessage":"用户名或密码错误"
}我们用SetError试下,如下:
context.SetError("{\"ResultCode\":-1,\"ErrorMessage\":\"用户名或密码错误\"}");结果输出的是:
{
"error": "{\"ResultCode\":-1,\"ErrorMessage\":\"用户名或密码错误\"}"
}解决方法就是Nuget上下载thinktecture.IdentityModel.Client,主要代码参考:
private JObject Login(LoginRequest request, string scope)
{
string url = "http://" + HttpContext.Current.Request.Url.Host ;
int port = HttpContext.Current.Request.Url.Port;
if (port != 80) {
url = url + ":" + port;
}
url = url + "/token";
Uri apiUrl = new Uri(url);
var client = new OAuth2Client(apiUrl);
var response = client.RequestResourceOwnerPasswordAsync(request.Login,
request.Password,
scope).Result;
if (response.IsError)
{
throw new BaseException(response.Error);
}
return response.Json;
}