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

Add Google authentication method to existing ASP.NET WebAPI project

我有一个现有的 C# ASP.NET WebAPI 2.0 项目,其中包含一些用于另一个 网站 的方法。此 WebAPI 项目没有任何身份验证和 returns JSON 数据。第一种方法从 website 获取两个参数:EmailPassword 然后在 MS SQL table and returns JSON (success or wrong): if success 然后我创建一些 token 并添加 tokenuser_id到另一个 MS SQL table。这个方法returnstoken如果一切正常

    [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 用户?

您可以直接通过 Userinfo 端点

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

这将 return 有关相关用户的信息

{
  "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"
}