angular - 如何在 Asp.Net Core Web Api 和 spa(Angular)中正确实现“Google 登录”?
问题描述
我在我的谷歌控制台中注册了一个应用程序,我得到了我的 client_id 和 client_secret。
到目前为止,我检查的每个解决方案都没有在任何级别使用 client_secret 来完成这项工作。
什么是 client_secret 用于虽然?
我在 spa 端使用angularx-social-login .. 所以我使用我的 client_id 从谷歌获取令牌,然后将其发送到我的后端服务器.. 我现在该怎么办?
如何验证我在后端从谷歌获得的令牌?
通过“验证”,我的意思是如何确定令牌是使用我的 SPA 和我自己的 WebApplication client_id 获得的?
更新:感谢Mosia Thabo这个答案帮助了我。谢谢大家。
解决方案
在 OAuth2 中有 3 方:服务器(Google)、客户端(您)和用户(您的用户)。用于在client_secret
安全环境中进行客户端到服务器的通信,其中“安全”意味着您不必向用户公开您的凭据。由于您使用的 SPA 在客户端公开其所有源代码,因此您不能在该源代码中包含您的客户端密码,否则您的用户将能够伪装成您的服务器并且他们将拥有完全访问权限到您所有用户的信息。因此,您最有可能使用 OAuth2 工作流程,例如仅依赖于密码授予client_id
和其他凭据(例如属于用户的密码和用户名)的密码授予。最好遵循完整的授权代码工作流程您在哪里使用client_id
并重定向您的用户以通过服务器进行身份验证,这样您就不必处理敏感的用户数据,如密码。
要验证访问或 ID 令牌,您必须将令牌发送到后端并在那里进行验证,或者使用 Google 的tokeninfo
端点。
推荐阅读
- r - 仅选择以字母开头的字符串的前两位数字,否则不执行任何操作
- unit-testing - 将 PCOV 与 --coverage 一起使用时,代码接收测试失败
- reactjs - TypeError:无法读取 React js 中未定义的属性“有效负载”
- excel - 当我将动态表从 excel 共享给另一个人时,他们遇到了兼容性问题
- kdb - 为什么从键控表中选择不起作用
- regex - 使用正则表达式在 URL 中查找 2 个参数
- javascript - 反应 setState 不更新 AG Grid onCellValueChanged 回调中的状态
- c# - 如何在 ViewModel 中获取 CollectionView 元素的索引?
- dataframe - 如何在熊猫数据框中填充 0?
- php - 将多个查询组合成一个输出