0

0

构建有效的 JWT 声明集

聖光之護

聖光之護

发布时间:2024-09-29 10:48:01

|

447人浏览过

|

来源于dev.to

转载

构建有效的 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 保护的资源。

ECTouch移动商城系统
ECTouch移动商城系统

ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有

下载

关于那个公关

原始代码看起来像

    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,
        }
    )

在此处查找此示例的完整(更新!)代码。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

415

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

310

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

75

2025.09.10

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6101

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

810

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1063

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1269

2024.03.01

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 4.6万人学习

XML教程
XML教程

共142课时 | 5.7万人学习

Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号