在 Angular / Golang 项目中使用 JWT

Posted

技术标签:

【中文标题】在 Angular / Golang 项目中使用 JWT【英文标题】:Using JWT in a Angular / Golang project 【发布时间】:2016-08-25 21:18:23 【问题描述】:

我在弄清楚如何为我的项目正确使用 JWT 时遇到问题。

情况是这样的:

我有一个网站,人们可以通过 twitch 登录,它会根据我的要求给我一个 oauth 令牌、他们的用户名和更多内容。 (这就是身份验证过程的样子https://github.com/justintv/Twitch-API/blob/master/authentication.md)

在我的数据库中,我有一些具有访问级别的用户名。例如,级别 500 意味着他们可以在我的网站上看到管理仪表板,或者他们可以从 Angular 发送 POST 请求以更改数据。

我的 Angular 应用程序显然无法访问数据库。我只想通过我的 go 网络服务器提供的 API 进行通信。

我想知道的是如何确保尝试发送安全 POST 或 GET 的用户实际上是他所说的用户并且有权执行他正在执行的命令。

【问题讨论】:

【参考方案1】:

JWT 由 3 部分组成:标头(用于“元数据”,如使用的加密算法等)、声明(存储在令牌中的实际数据)和 HMAC(用于验证上面两部分没有被篡改)。

在您的情况下,当您用户登录时,您应该收到 oauth 令牌、他们的用户名等。然后您可以使用用户名来获取关联的用户级别,并将所有内容存储在您自己的 JWT 声明中,您将发回给用户。在随后的请求中,您只需要检查令牌是否有效(不要忘记给他们一个简短的 ttl),然后您就可以确定发出请求的用户是它声称的用户它是(助记符双关语)。

【讨论】:

以上是关于在 Angular / Golang 项目中使用 JWT的主要内容,如果未能解决你的问题,请参考以下文章

我可以在一台服务器上托管 Angular2 前端和 Golang 后端吗

golang项目中使用条件编译

Golang入门到项目实战 golang中的if语句

Golang入门到项目实战 golang 函数

Golang mongodb 从集合中删除所有项目 [mgo.v2]

Golang入门到项目实战 | golang 函数