使用 php-jwt 库解码 firebase 自定义令牌时出现 openssl_verify() 错误
Posted
技术标签:
【中文标题】使用 php-jwt 库解码 firebase 自定义令牌时出现 openssl_verify() 错误【英文标题】:openssl_verify() error while decoding firebase custom token using php-jwt library 【发布时间】:2016-11-14 12:24:13 【问题描述】:我已按照建议 here 使用 php-jwt 库为 Firebase 上的自定义身份验证生成了 firebase 自定义令牌。
我试图使用同一库的 decode 函数解码生成的令牌。
这是我的代码。
我已使用以下行在我的配置文件中定义了私钥。
define("FIREBASE_PRIVATE_KEY","-----BEGIN PRIVATE KEY-----\nMY_VERY_VERY_LONG_KEY\n-----END PRIVATE KEY-----\n");
这是解码令牌的代码。
JWT::decode($token, FIREBASE_PRIVATE_KEY, array('RS256'));
此代码引发以下异常。
openssl_verify(): supplied key param cannot be coerced into a public key
当我使用 HS256 进行解码和编码时,一切正常。 但我必须使用 RS256,因为 Firebase 自定义令牌只需要使用 RS256 进行签名。
任何人都可以提出解决方案吗?
【问题讨论】:
这可能与您将 私钥 提供给需要 公钥 的函数的事实有关。您如何将公钥提取到单独的变量/常量中并传递它,而不是私钥? @Mjh:你的意思是我必须从可用的私钥创建一个公钥。然后将该公钥发送到解码功能?我该怎么做? 【参考方案1】:免责声明:未经测试,基于我所知道的(目前)。
openssl_verify
接受 public key 作为参数,根据文档。
您正在提供私钥。
我会尝试从私钥中提取公钥,并在JWT::decode
方法中使用它。
如何从私人中提取公共?很简单:
define("FIREBASE_PRIVATE_KEY","-----BEGIN PRIVATE KEY-----\nMY_VERY_VERY_LONG_KEY\n-----END PRIVATE KEY-----\n");
$private = openssl_pkey_get_private(FIREBASE_PRIVATE_KEY);
$details = openssl_pkey_get_details($private);
// Here's your public key, it's presented as a string, not a resource
$public = $details['key'];
【讨论】:
以上是关于使用 php-jwt 库解码 firebase 自定义令牌时出现 openssl_verify() 错误的主要内容,如果未能解决你的问题,请参考以下文章
laravel firebase/php-jwt token验证