构建有效的 JWT 声明集
来源:dev.to
时间:2024-10-17 18:33:45 140浏览 收藏
最近发现不少小伙伴都对文章很感兴趣,所以今天继续给大家介绍文章相关的知识,本文《构建有效的 JWT 声明集》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~
简介
我需要审查一个拉取请求,该请求正在修复样本报告的问题,并且在测试通过时,感觉样本中肯定还有更多事情需要更改。
我了解 json web token(jwt 发音为“jots”)有一段时间了,但我不了解它们。看到这个 pr 让我有理由进一步深入研究它们。
什么是 jwt
jwt 是一种用于在各方之间安全传输信息的开放标准方法。它们通常用于验证用户身份并授权对资源的访问。它们由 3 部分组成:标头、有效负载和签名。
为什么需要 jwt
iam 服务账户凭证 api 创建短期凭证来模拟 iam 服务账户。 signjwt 方法将使用服务帐户的系统管理私钥对 jwt 进行签名。在signjwt方法的请求正文中,有效负载字段应包含一个序列化的json对象,该对象包含jwt声明集。
什么是智威汤逊声明
声明是 jwt 传输的核心信息。
以下是有效声明集的示例:
{ "iss": "https://cloud.google.com/iam", "sub": "projects/-/serviceaccounts/my-service-account@my-project.iam.gserviceaccount.com", "aud": "https://my-iap-protected-app.example.com", "iat": 1694003600, "exp": 1694007200 }
此声明集包含以下字段:
- iss:jwt 的颁发者,将进行身份验证的服务帐户,在本例中应该是服务帐户电子邮件。
- sub:jwt 的用户主题,即服务帐户电子邮件。
- aud:jwt 的受众,即受 iap 保护的资源的 url。
- iat:issued at time,即生成jwt的时间。这必须是 utc 格式的整数。
- exp:过期时间,即jwt将不再有效的时间。 cloud iam 记录了其他限制:不能是过去的时间,也不能是未来超过 12 小时的时间。
通过将这些声明包含在 jwt 的有效负载中,您可以确保其有效并可用于访问受 iap 保护的资源。
关于那个公关
原始代码看起来像
iat = datetime.datetime.now(tz=datetime.timezone.utc) exp = iat + 3600 return json.dumps( { "iss": service_account_email, "sub": service_account_email, "aud": resource_url, "iat": iat, "exp": exp, } )
我知道测试出了问题,但我不想阻止解决此代码的根本问题。
公关作者提交了更改
iat = datetime.datetime.now(tz=datetime.timezone.utc).timestamp()
这似乎是一个不完整的修复。根据 api 的文档,我意识到提交的修复仍然不会将 iat 设置为 int 类型,并且仍然会失败。我提出了一个小小的改变,可以解决 pr 的问题
now_utc = datetime.datetime.now(tz=datetime.timezone.utc) iat = int(now_utc.timestamp())
我想得越多,我意识到日期时间对于这个示例没有用处。 datetime 模块提供了用于操作日期和时间的类,当您需要日期时,这些类非常有用。我们确实需要一个 utc 格式的整数,因此 time 模块更有用。
insetad,我们能做到
now = int(time.time()) return json.dumps( { "iss": service_account_email, "sub": service_account_email, "aud": resource_url, "iat": now, "exp": now + 3600, } )
在此处查找此示例的完整(更新!)代码。
到这里,我们也就讲完了《构建有效的 JWT 声明集》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
325 收藏
-
398 收藏
-
498 收藏
-
457 收藏
-
385 收藏
-
206 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习