首页 > 解决方案 > 将 Google 身份验证方法添加到现有 ASP.NET WebAPI 项目

问题描述

我有另一个网站C# ASP.NET WebAPI 2.0的一些方法的现有项目。此 WebAPI 项目没有任何身份验证并返回数据。第一种方法从网站获取两个参数:电子邮件密码,然后在 MS SQL 表中检查它并返回(成功错误):如果成功,则我创建一些令牌并将带有user_id的令牌添加到另一个 MS SQL 表。如果一切正常,此方法将返回令牌。JSONJSON

    [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 的授权已添加到网站。所以我需要添加新方法,它将通过谷歌检查成功或错误的身份验证。网站开发人员只向我发送access_token,如下所示:

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

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

标签: c#asp.net-web-apiasp.net-identitygoogle-oauth

解决方案


您可以直接通过 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"
}

推荐阅读