在.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; }