1. 首页>
  2. 技术文章>
  3. 使用Thinktecture.IdentityModel.Client灵活控制oauth2.0中的登陆

使用Thinktecture.IdentityModel.Client灵活控制oauth2.0中的登陆

6/25/18 9:40:09 PM 浏览 984 评论 1

Thinktecture oauth

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


网友讨论

1楼 7/9/18 11:04:34 PM
?