首页 > 解决方案 > 如何在 PHP 中验证 JWT 令牌并从 JWT 令牌中获取声明?

问题描述

我正试图围绕 JWT 的身份验证方法。我已将作曲家和 Firebase 加载到我的服务器中。

我有一个 login.php 页面和一个 dashboard.php 页面。目前,用户可以单击登录按钮,通过 Azure B2C 进入登录页面,然后使用 JWT Token 重定向回dashboard.php 页面。我的目标是验证令牌,然后从声明中获取用户名。此外,我想知道令牌标头中的“密钥”是否与我在脚本中使用的密钥相同,或者这是 B2C 系统中的单独密钥?

我下面的代码似乎只想将用户发送回 login.php 页面。

require_once "/home/mydirectory/vendor/autoload.php";

if (!isset($_SERVER['HTTP_AUTHORIZATION'])) { 
  header('Location: login.php');
  exit;
} else {
if (! preg_match('/Bearer\s(\S+)/', $_SERVER['HTTP_AUTHORIZATION'], $matches)) {
header('HTTP/1.1 401 Unauthorized');
 exit;
}
 }
  $retrievedToken = $matches[1];
  $issuer = 'https://example.org/lettersnumbers/v2.0/';
  $key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
  $token = \Firebase\JWT\JWT::decode($retrieveToken, $key, ['HS256']);
  $now = new DateTimeImmutable();

  if ($token->iss !== $issuer || $token->nbf > $now->getTimestamp() || $token->exp < $now->getTimestamp())
  {
 header('HTTP/1.1 401 Unauthorized');
 exit;
 }

我也在我的 htaccess 文件中添加了这个

 RewriteEngine On
 RewriteCond %{HTTP:Authorization} ^(.+)$ 
 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

标签: javascriptphpjsonjwt

解决方案


推荐阅读