dragosgaftoneanu/okta-simple-jwt-verifier

此包已被废弃,不再维护。未建议替代包。

用于验证Okta orgs签发的JWT令牌的SDK。

1.3.2 2021-03-21 08:18 UTC

This package is auto-updated.

Last update: 2023-12-03 11:17:23 UTC


README

Okta Simple JWT Verifier 是一个简单的独立库,可用于验证由Okta orgs签发的JWT令牌。

⚠️ 免责声明: 这不是一个官方产品,并不适用于Okta支持。

安装

您可以通过Composer运行以下命令来安装此库

composer require dragosgaftoneanu/okta-simple-jwt-verifier

要求

  • 一个名为组织的Okta账户(您可以在开发者组织处免费注册)
  • 运行PHP 7.0+的本地Web服务器

可用方法

setAudience($audience)

此方法设置JWT令牌中要检查的受众。

setClientId($clientId)

此方法设置在访问令牌中存在的 cid 声明中要检查的客户端ID,或用于令牌自省。

setClientSecret($clientSecret)

此方法设置用于令牌自省的客户端密钥。

setIssuer($issuer)

此方法设置JWT令牌中要检查的发行者。

setPem($pem)

此方法设置用于检查JWT令牌的公钥。当您想验证本地保存的密钥时,这很有用。

setNonce($nonce)

此方法设置JWT令牌中要检查的nonce。

useIntrospect($status)

此方法将JWT验证更改为使用/introspect端点而不是本地验证。

verify()

此方法验证JWT令牌内的以下详细信息

  • 头中的算法设置为RS256(当前支持算法)
  • 签发时间不应在未来(服务器时间未正确对齐UTC时区的情况很少)
  • 过期时间不应在过去(在这种情况下,提供的令牌已过期)
  • 受众声明(如果之前添加了 setAudience($audience)
  • 客户端ID声明(如果之前添加了 setClientId($clientId)
  • 发行者声明(如果之前添加了 setIssuer($issuer)
  • nonce声明(如果之前添加了 setNonce($nonce)
  • 签名

此方法的结果是一个包含用于验证发送的JWT令牌体的数组。

如果您正在使用 useIntrospect(),则 verify() 将会向授权服务器的 /introspect 端点发送请求。

createPemFromModulusAndExponent($n, $e)

此方法根据 /keys 端点上的模数和指数创建公钥。

示例

以下示例接收一个 JWT 令牌,验证它并根据响应返回反馈。

use Okta\SimpleJWTVerifier\SimpleJWTVerifier;

try{
	$jwt = new SimpleJWTVerifier("eyJraWQiOiJkbUhnMjRzNDdnWXZ6bE5JWTFmMFJxWVdrb2VQQ2R0WmdVdnRxdnNzeTRVIiwiYWxnIjoiUlMyNTYifQ.eyJ2ZXIiOjEsImp0aSI6IkFULkU2OUFHdVZPYmRsYzlkY2J1WHZ4MkE5NnR0TVRhajZqX1JWMXVORDI5SW8iLCJpc3MiOiJodHRwczovL2RyYWdvcy5va3RhLmNvbS9vYXV0aDIvYXVzMzhlbDg4bGZjTDZQRmcycDciLCJhdWQiOiJodHRwczovL2Rldi5va3RhLmFkbWlucGFuZWwuYml6IiwiaWF0IjoxNTYwNzYyODAzLCJleHAiOjE1NjA3NjY0MDMsImNpZCI6IjBvYTJmYXR4NzBKR2lVMlRBMnA3IiwidWlkIjoiMDB1b3piZ2MwM3d6cW9hWHAycDYiLCJzY3AiOlsib3BlbmlkIiwicHJvZmlsZSJdLCJzdWIiOiJ0ZXN0LnVzZXJAb2t0YS5sb2NhbCIsIm9yZyI6InRlc3QifQ.vXowkWk_s-_0M6BZir0KaJSthslu7YWXMa4HsOlAU1xlLCtdC17iiIx1vA5WFiJyNFIkc1ClHdGxbDNpmMUBkKDkJ8fQ81gwt172f8hReeN4ndHEklBpCyQRGXS1by2gooCiMrK8kUCm3gUhaMnnVSZTzyipWlwS7scj8CY2LKAZsUXEnsQSWpmU1fnNoZpsE-1YkLbLXkRSPa2W_-TomnVntx-QZRNLoDl219r3eyGErc21S5pLtESkU4AtgiAHKW87eNrAJ94Lza_3ZlNnciTjDu3d3DLtLlvv6FeRA2eGmubwVAVo0nojWQ7dPUy3IZdayxsYhdhAJu5ZB67YmQ");
	$jwt->setAudience("https://dev.okta.adminpanel.biz");
	$jwt->setClientId("0oa2fatx70JGiU2TA2p7");
	$jwt->setIssuer("https://dragos.okta.com/oauth2/aus38el88lfcL6PFg2p7");
	$result = $jwt->verify();
	print_r($result);
}catch (Exception $e){
	echo $e->getMessage();
}

根据编写 README 文档时的状态,返回的响应将是

Array
(
    [ver] => 1
    [jti] => AT.E69AGuVObdlc9dcbuXvx2A96ttMTaj6j_RV1uND29Io
    [iss] => https://dragos.okta.com/oauth2/aus38el88lfcL6PFg2p7
    [aud] => https://dev.okta.adminpanel.biz
    [iat] => 1560762803
    [exp] => 1560766403
    [cid] => 0oa2fatx70JGiU2TA2p7
    [uid] => 00uozbgc03wzqoaXp2p6
    [scp] => Array
        (
            [0] => openid
            [1] => profile
        )

    [sub] => test.user@okta.local
    [org] => test
)

示例 /introspect 验证

use Okta\SimpleJWTVerifier\SimpleJWTVerifier;

try{
	$jwt = new SimpleJWTVerifier("eyJraWQiOiJKV1psRUJoZUhVQ1ZwSWJvekw1MnByUDZTRUh1YkQwU2dxNlRCNUc0MjhVIiwiYWxnIjoiUlMyNTYifQ.eyJ2ZXIiOjEsImp0aSI6IkFULmhRUzN3OFlOekYxTzBhYzk4cm5hcVp4NldtZlA2Zk03WGgxNGRlU1hkQmsiLCJpc3MiOiJodHRwczovL2RyYWdvcy5va3RhLmNvbSIsImF1ZCI6Imh0dHBzOi8vZHJhZ29zLm9rdGEuY29tIiwic3ViIjoidGVzdC51c2VyQG9rdGEubG9jYWwiLCJpYXQiOjE1ODU1NTQzNTIsImV4cCI6MTU4NTU1Nzk1MiwiY2lkIjoiMG9hMmZhdHg3MEpHaVUyVEEycDciLCJ1aWQiOiIwMHVvemJnYzAzd3pxb2FYcDJwNiIsInNjcCI6WyJvcGVuaWQiXX0.okZDD1S6fhVs8_QEj_q0v73aBpZu7GLkj8ywgw6Jsl1EhQDQXqa05j5UXEn8eR2Nz3mSaY8kdAZJJfWiQKa19x5FplNy3OTq8tqdAHn24wsk5W5jwVys896dTp3UgGUXe2D7yq6pIUquuGUkJ1ymvQHTP2dy_FW3CFodvcJWhIRGm57OIA8v7DuBM1kNE-vJlsAJjjRrgCWa1IJZMstsDD1oOSNdXz7_inCg6qOaeI9QE_CmfFHAuqHAC40nN4_GaAk2IgOpU2SLq3CFaZhlypVSb1luss4NemKcjIja7-BSXgtnS5gHj1-vokXxvxnpxiGYBs7l4HgIVWc_BEsCzg");
	$jwt->setClientId("0oa2fatx70JGiU2TA2p7");
	$jwt->setClientSecret("jX-hj3j7GOxKqNcndtjs5se5a4yxr9jGIydtN3daK");
	$jwt->setIssuer("https://dragos.okta.com");
	$jwt->useIntrospect(TRUE);
	$result = $jwt->verify();
	print_r($result);
}catch (Exception $e){
	echo $e->getMessage();
}

根据编写 README 文档时的状态,返回的响应将是


Array
(
    [ver] => 1
    [jti] => AT.hQS3w8YNzF1O0ac98rnaqZx6WmfP6fM7Xh14deSXdBk
    [iss] => https://dragos.okta.com
    [aud] => https://dragos.okta.com
    [sub] => test.user@okta.local
    [iat] => 1585554352
    [exp] => 1585557952
    [cid] => 0oa2fatx70JGiU2TA2p7
    [uid] => 00uozbgc03wzqoaXp2p6
    [scp] => Array
        (
            [0] => openid
        )

)

⚠️ 令牌反查需要向授权服务器(令牌发行来源)的 /introspect 端点发送请求,具体操作请参见此处。出于灵活性考虑,库不会检查 Okta 组织的速率限制

版权

此库是在okta/okta-jwt-verifier-phpfirebase/php-jwt的基础上构建的。