【问题标题】:Does JWT RS256 requires OpenSSL? Can't decode JWT in PhpJWT RS256 是否需要 OpenSSL?无法在 PHP 中解码 JWT
【发布时间】:2020-04-25 04:32:23
【问题描述】:

我们的证书是 Comodo Positive SSL。
我们正在尝试使用 Php 和 https://github.com/firebase/php-jwt 这个库来解码从“使用 Apple Id API 签名”提供的 JWT。 当我们运行 decode 它给了我们

A PHP Error was encountered
Severity: Warning

Message: openssl_verify(): supplied key param cannot be coerced into a public key

Filename: php-jwt/JWT.php

Line Number: 231

Array ( [status] => [message] => OpenSSL error: error:0906D06C:PEM routines:PEM_read_bio:no start line )

我们不知道该怎么做.. 如果我们将 RS256 更改为 HS256,它会给我们带来帮助

Array ( [status] => [message] => Algorithm not allowed )

【问题讨论】:

  • 听起来您的公钥已损坏。打开它并仔细检查它是否正常
  • @delboy1978uk 问题是我们不使用 Open SSL,我们使用 Comodo Positive SSL。我不知道这是否适用于 Comodo Positive SSL。
  • 错误信息确认您确实在使用开放式 SSL
  • 是我的误解还是您试图“解码”其他人(Apple)生成的 JWT?通常:JWT 仅使用 Base64 编码(由点分隔的三部分)进行编码,不需要解码任何证书。然后最后一部分是签名(这里可能会涉及证书,但不一定会涉及),如果是由其他人生成的,则预计您将无法处理。他们(JWT 的创建者)只能验证签名(实际上不能解码)。

标签: php ssl openssl jwt


【解决方案1】:

JWT 是一个令牌字符串,由三部分组成,由点'.' 字符分隔。

每个部分都是 Base64 编码(未加密),因此您可以通过分别对每个部分进行 Base64 解码来获取每个部分的内容。由于 Base64 编码的数据不包含点 '.' 字符,这使得在任何情况下都可以使用它作为分隔符来连接这三个部分。

三个子字符串的内容,一旦 JWT 被拆分并且每个单独的部分 Base64-decoded 如下:

  • 用于签名的算法
  • JSON 格式的信息性内容
  • 签名

因此,为了检索令牌带来的信息,需要:

  • 在点 '.' 个字符处拆分 JWT
  • 参加第二部分并Base64-decode

必须考虑到,JWT 中包含的信息不受读取保护,它受到保护,不被修改;因此在不知道证书或加密密钥的情况下能够解码和访问这些信息并没有错。

与令牌相关的整个过程有三个参与者:

  • 颁发者:通常是身份验证 API
  • 承载者:通常是 API 客户端应用程序
  • 消费者:通常是需要它响应的 API

令牌的第三部分,签名,是允许消费者确保令牌未被修改的元素,因此,其中包含的信息可以被信任,因为已经检查/提供由发行人。

不希望承载者能够检查令牌:它只是希望从验证过程中接收令牌并将其提供给它想要使用的 API。它最终可以访问内容,这意味着在应用程序的上下文中,接收令牌信息的客户端访问令牌信息不必构成漏洞。令牌必须通过受保护的通道(如 SSL / https)传递给客户端(并发送回消费者),这是为了保护 其他实体而不是客户端访问令牌令牌正在交付中。

消费者和发行者通常(但不一定)只是同一应用程序的不同 API 方法。

用于签名的算法可以是对称或非对称加密算法。 在第一种情况下,加密密钥必须在发行者和消费者之间共享。尽管这似乎是一个问题,但在发行者也是消费者(或至少它们在同一主机中)的情况下(一种非常常见的情况),情况并非如此。在这种情况下,“共享秘密”确实没有与任何人共享。

当发行者需要将消费者(一个或多个)分开时,可以使用非对称加密,以便发行者保留私钥,消费者只拥有公钥。在这种情况下,当然也可以采用对称加密,但“共享密钥”必须真正与不同的消费者共享,因此如果可以安全地完成和维护,则必须进行评估。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2020-12-01
    • 1970-01-01
    • 2021-03-02
    • 2021-05-10
    • 1970-01-01
    • 2019-04-06
    相关资源
    最近更新 更多