mangopop/jwt-verifier-sym28

用于处理Okta JWT的验证库,为symfony 2.8进行了降级处理

1.0.2 2021-02-23 14:59 UTC

This package is auto-updated.

Last update: 2024-09-23 22:49:30 UTC


README

Packagist License Support

PHP Okta JWT 验证器

在用户成功通过获取授权令牌或使用Okta API后,您将获得一个签名的JWT(id_token和/或access_token)。这些访问令牌的常见用途是在Bearer认证头中使用,以便让您的应用程序知道正在发出请求的用户是谁。为了验证这种使用是否有效,您需要知道如何验证令牌与Okta。本指南提供了一个使用Okta的JWT验证库的PHP验证令牌的示例。

发布状态

此库使用语义化版本控制,并遵循Okta的库版本策略

最新版本始终可以在发布页面找到。

安装

Okta JWT 验证器可以通过composer安装。

composer require okta/jwt-verifier

此库需要一个JWT库。我们目前支持firebase/php-jwt。您必须安装此库或创建自己的适配器。

composer require firebase/php-jwt

要创建自己的适配器,只需在您的类中实现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();

验证JWT

在您从上述部分获得$jwtVerifier以及从成功的登录或授权头中的Bearer token中获取access_token之后,您需要确保它仍然有效。您只需调用decode方法(其中$jwtString是您的字符串格式的访问令牌)。

$jwt = $jwtVerifier->verify($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插入到您选择的框架中。