okta/jwt-verifier

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

用于处理Okta JWT的验证器库

1.4.0 2022-03-03 15:48 UTC

This package is not auto-updated.

Last update: 2023-02-16 20:31:48 UTC


README

68747470733a2f2f617773312e646973636f757273652d63646e2e636f6d2f7374616e6461726431342f75706c6f6164732f6f6b74616465762f6f726967696e616c2f31582f306336343032363533646662373065646336363164343937366134336134366633336535653931392e706e67 Packagist License Support

通知:我们对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,您需要几个不同项

  1. 您的发行者URL
  2. 您想要验证的JWT字符串
  3. 访问您的脚本中的供应商自动加载文件。
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/okta-jwt 插入您选择的框架。