c# - 将 Google 身份验证方法添加到现有 ASP.NET WebAPI 项目
问题描述
我有另一个网站C# ASP.NET WebAPI 2.0
的一些方法的现有项目。此 WebAPI 项目没有任何身份验证并返回数据。第一种方法从网站获取两个参数:电子邮件和密码,然后在 MS SQL 表中检查它并返回(成功或错误):如果成功,则我创建一些令牌并将带有user_id的令牌添加到另一个 MS SQL 表。如果一切正常,此方法将返回令牌。JSON
JSON
[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 用户?
解决方案
您可以直接通过 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"
}
推荐阅读
- google-maps - Flutter Failed to decode image. The provided image must be a Bitmap., null)
- node.js - (ECONNREFUSED)(https://nodejs.org/api/errors.html#errors_common_system_errors)
- c# - 在 DataGridView 中单击行时如何禁用列标题选择
- c# - INSERT 语句与 FOREIGN KEY SAME TABLE 约束冲突 | ASP.NET Core & Entity Framework Core 代码优先
- ios - iOS 上私人使用区域 (PUA) 中的图标字体被表情符号覆盖
- sql - 查找具有延期日期范围的行并累积其持续时间
- python - 在matplotlib中制作高度为0的透明色条
- google-apps-script - 用于替换许多其他电子表格中的内容和公式的脚本
- javascript - 存根函数返回承诺
- sql - 具有多个表连接的单个查询中的多个计数 - SQL