将Google身份验证方法添加到现有的ASP.NET WebAPI项目中

时间:2018-11-22 09:48:34

标签: c# asp.net-web-api asp.net-identity google-oauth

我已经存在一个C# ASP.NET WebAPI 2.0项目,并且有几种方法可以用于另一个网站。此WebAPI项目没有任何身份验证,并返回JSON数据。第一种方法从网站获取两个参数:电子邮件密码,然后在MS SQL表中对其进行检查并返回JSON成功错误):如果成功,则我创建了一些令牌,并添加了令牌和< strong> user_id 到另一个MS SQL表。如果一切正常,此方法将返回令牌

    [HttpPost]
    [Route("api/v1/auth/email-login")]
    [ActionName("EmailLogin")]
    public IHttpActionResult Postpipeline_EmailLogin([FromBody] PostAuthItem postAuthItem)
    {
        try
        {
            int? userId = db.USERS_GetUserId(postAuthItem.Email, postAuthItem.Password).FirstOrDefault();
            if (userId == null)
            {
                return Ok(new
                {
                    Error = "Wrong email or password!"
                });
            }
            else
            {
                string token = this.GetToken(40);

                db.TOKENS_Add(userId, token);
                db.SaveChanges();

                return Ok(new
                {
                    Token = token
                });
            }
        }
        catch (Exception ex)
        {
            return new System.Web.Http.Results.ResponseMessageResult(Request.CreateErrorResponse((HttpStatusCode)400, new HttpError("Http error! " + ex.Message + " " + ex.InnerException.Message)));
        }
    }

现在通过Google授权已添加到网站。因此,我需要添加新方法,该方法将通过Google检查成功或错误的身份验证。 网站开发者仅向我发送 access_token ,例如:

Request:
{
    "access_token": "ya47.Kdd_KeQ0mQiTzom20dQ6M83742KMYQpkCUqCZv0UbU2CjhMIuxIT5ugRXwIrOUcV-TGbUztMiRDRPzh0INrGgh7gqXyaIfyQAnNMmP0GhXRc6bbanEiPxV7fK9ss"
}

是否有可能通过此请求检查有效的Google用户?

1 个答案:

答案 0 :(得分:1)

您可以直接通过Userinfo端点

GET /userinfo/v2/me HTTP/1.1
Host: www.googleapis.com
Content-length: 0
Authorization: Bearer 29.GltcBsh3Q-qbIEslOBcifBKlRh2GfE0-P11tDMgBx_WdWdH1TG6iWkDtzj0e_zIERaDyq6b_oseOIiSpG3iO0LIeQuAAyn5VVDe50WVmdtWhrMiN27wTsUJY0jxP

这将返回有关用户的信息

{
  "picture": "https://lh5.googleusercontent.com/-a1CWlFnA5xE/AAAAAAAAAAI/AAAAAAAAl1I/UcwPajZOuN4/photo.jpg", 
  "name": "Linda Lawton", 
  "family_name": "Lawton", 
  "locale": "en", 
  "gender": "female", 
  "link": "https://plus.google.com/+LindaLawton", 
  "given_name": "Linda", 
  "id": "117200475532672775346"
}