dragosgaftoneanu / okta-simple-jwt-verifier
此包已被废弃,不再维护。未建议替代包。
用于验证Okta orgs签发的JWT令牌的SDK。
1.3.2
2021-03-21 08:18 UTC
Requires
- php: >=7.0.0
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-php和firebase/php-jwt的基础上构建的。