【发布时间】:2018-12-07 22:49:14
【问题描述】:
创建我的新反应前端应用程序套件的第一步是最好在 Go 中创建一个简单的身份验证服务器/服务,用户可以使用他们的谷歌帐户进行身份验证,这将导致:
- 在数据库中创建一个新用户
- 如果在db中找到匹配的用户则登录(如何确定没有密码的匹配?)
我意识到我将从 Auth 服务器/服务获得 JWT,其中包含以下常见声明:
{
"iss":"accounts.google.com",
"at_hash":"HK6E_P6Dh8Y93mRNtsDB1Q",
"email_verified":"true",
"sub":"10769150350006150715113082367",
"azp":"1234987819200.apps.googleusercontent.com",
"email":"jsmith@example.com",
"aud":"1234987819200.apps.googleusercontent.com",
"iat":1353601026,
"exp":1353604926,
"nonce": "0394852-3190485-2490358",
"hd":"example.com"
}
到目前为止一切都很好,但是在那之后我不确定我需要为用户“表”存储哪些字段(使用 dgraph 数据库,但我想它是关系数据库还是图形数据库并不重要) 在电子邮件以外的数据库中,据我了解,这将是将 db 中的用户与 JWT 配对的标识符?
您如何处理与您自己的数据库的集成:
- 用户首次通过身份验证服务器/服务向 google 进行身份验证并在 db 中创建用户
- 随后用户通过相同的身份验证服务器/服务向 google 进行身份验证并登录(已经存在于 db 中 - 但如何以安全的方式验证这一点 - 其他人不能用相同的电子邮件制作虚假令牌吗? )
您是否将令牌与电子邮件一起存储在用户表中?在这种情况下,如果令牌过期/更改该怎么办?安全性如何?
所以问题不在于如何获取令牌,而在于如何将数据库中的用户与刚刚通过身份验证的 JWT 用户连接起来。
我读过的大多数教程和文章都没有详细描述数据库部分。
【问题讨论】:
-
没有标记为关闭,因为这里有很多,但是“关于库的建议”对于 Stack Overflow 来说是特别离题的。
-
对不起,你是对的。删了。
-
这真的取决于你需要什么关于用户的信息。如果您需要记住权限、偏好等,请将其存储起来。否则,在您需要更多信息之前,只需发送一封电子邮件即可。
-
之后我可以轻松地在图形数据库中查询组、角色和权限或其他任何内容,并将其放入 redux。我不喜欢在 jwt 中添加不必要的东西。这是我感兴趣的与数据库的连接。
标签: go oauth-2.0 jwt openid-connect