okta / jwt-verifier
用于处理Okta JWT的验证器库
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- bretterer/iso_duration_converter: ^0.1.0
- illuminate/cache: ^8.83.1 || ^9.0
- nesbot/carbon: ^2.0
- php-http/client-common: ^2.3
- php-http/curl-client: ^2.1
- php-http/discovery: ^1.9
- php-http/httplug: ^2.2
- php-http/message: ^1.8
- psr/http-message: ^1.0
Requires (Dev)
- firebase/php-jwt: ^5.2
- guzzlehttp/psr7: ~2.0.0
- mockery/mockery: ^1.5
- php-http/mock-client: ^1.4
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.5
- symfony/var-dumper: ^5.1
This package is not auto-updated.
Last update: 2023-02-16 20:31:48 UTC
README
通知:我们对Auth0的收购感到兴奋,这将为您带来更好的PHP支持。此仓库将仅用于安全补丁模式,我们将不会添加任何新功能。如果您正在寻找此库不支持的功能API,请直接调用API。支持的Management API文档位于此处:https://developer.okta.com/docs/reference/core-okta-api/。如有任何疑问,请访问DevForum。
PHP版的Okta JWT Verifier
通过成功认证或使用Okta API,您将获得一个签名的JWT(id_token和/或access_token)。这些访问令牌的常见用途是在Bearer认证头中使用,以让您的应用程序知道发起请求的用户是谁。为了验证这种使用是否有效,您需要知道如何针对Okta验证令牌。本指南为您提供了一个使用Okta的JWT验证库进行验证的示例。
此代码与默认授权服务器不兼容。您必须使用自定义授权服务器。在使用此代码之前,请检查是否为这种情况。
发布状态
此库使用语义版本,并遵循Okta的库版本策略。
版本 | 状态 |
---|---|
0.x | ⚠️ 测试版发布(已退役) |
1.x | ✔️ 发布 |
最新版本始终可以在发布页面找到。
安装
可以通过Composer安装Okta JWT Verifier。
composer require okta/jwt-verifier
此库需要一个JWT库。我们目前支持firebase/php-jwt版本5.2。您必须安装此库或创建自己的适配器。
composer require firebase/php-jwt ^5.2
要创建自己的适配器,只需在您的类中实现Okta/JwtVerifier/Adaptors/Adaptor
。
您还需要安装一个PSR-7兼容的库。我们建议在项目中使用guzzlehttp/psr7
。
composer require guzzlehttp/psr7
设置库
为了验证JWT,您需要几个不同项
- 您的发行者URL
- 您想要验证的JWT字符串
- 访问您的脚本中的供应商自动加载文件。
require_once("/vendor/autoload.php"); // This should be replaced with your path to your vendor/autoload.php file $jwtVerifier = (new \Okta\JwtVerifier\JwtVerifierBuilder()) ->setDiscovery(new \Okta\JwtVerifier\Discovery\Oauth) // This is not needed if using oauth. The other option is `new \Okta\JwtVerifier\Discovery\OIDC` ->setAdaptor(new \Okta\JwtVerifier\Adaptors\FirebasePhpJwt) ->setAudience('api://default') ->setClientId('{clientId}') ->setIssuer('https://{yourOktaDomain}.com/oauth2/default') ->build();
缓存
强烈建议缓存密钥以提高性能。您可以将\Psr\SimpleCache\CacheInterface
的实现传递给适配器构造函数。
例如,在Laravel中
// note: named parameters are only valid for php >= 8.0 ->setAdaptor(new \Okta\JwtVerifier\Adaptors\FirebasePhpJwt(request: null, leeway: 120, cache: app('cache')->store()))
如果使用symphony,您可能需要使用适配器: https://symfony.ac.cn/doc/current/components/cache/psr6_psr16_adapters.html
验证访问令牌
在上文部分获取 $jwtVerifier
以及从成功的登录或从授权头中的 Bearer token
获取 access_token
后,您需要确保它仍然有效。您只需要调用 verifyAccessToken
方法(其中 $jwtString
是您以字符串格式提供的访问令牌)。
$jwt = $jwtVerifier->verifyAccessToken($jwtString);
这将验证您的JWT以下内容:
- 令牌过期时间
- 签发时间
- 令牌发行者与上面辅助函数中传入的预期值匹配
- 令牌受众与上面辅助函数中传入的预期值匹配
验证方法的结果是一个具有一些辅助方法的 Jwt
对象
dump($jwt); //Returns instance of \Okta\JwtVerifier\JWT dump($jwt->toJson()); // Returns Claims as JSON Object dump($jwt->getClaims()); // Returns Claims as they come from the JWT Package used dump($jwt->getIssuedAt()); // returns Carbon instance of issued at time dump($jwt->getIssuedAt(false)); // returns timestamp of issued at time dump($jwt->getExpirationTime()); //returns Carbon instance of Expiration Time dump($jwt->getExpirationTime(false)); //returns timestamp of Expiration Time
验证ID令牌
$jwt = $jwtVerifier->verifyIdToken($jwtString);
这将验证您的JWT以下内容:
- 令牌过期时间
- 签发时间
- 令牌发行者与上面辅助函数中传入的预期值匹配
- 令牌受众与上面辅助函数中传入的预期值匹配
验证方法的结果是一个具有一些辅助方法的 Jwt
对象
dump($jwt); //Returns instance of \Okta\JwtVerifier\JWT dump($jwt->toJson()); // Returns Claims as JSON Object dump($jwt->getClaims()); // Returns Claims as they come from the JWT Package used dump($jwt->getIssuedAt()); // returns Carbon instance of issued at time dump($jwt->getIssuedAt(false)); // returns timestamp of issued at time dump($jwt->getExpirationTime()); //returns Carbon instance of Expiration Time dump($jwt->getExpirationTime(false)); //returns timestamp of Expiration Time
需要帮助?
如果您在使用SDK时遇到问题,您可以
- 在 Okta开发者论坛 上提问
- 在GitHub上发布 问题
- 与OAuth 2.0令牌一起工作
结论
上述是本地验证访问令牌的基本步骤。这些步骤与框架没有直接关联,因此您可以将 okta/okta-jwt
插入您选择的框架。