javascript - 如何在 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]
解决方案
推荐阅读
- java - Java成绩练习
- android - (< API 24)NavigationView 错误(膨胀类)(适用于 API24+)
- python - TensorFlow 在不需要时要求占位符 feed_dict
- generics - 通用函数返回映射
- scala - 无法将“ordId”从字符串转换为 int,因为它可能会截断
- python - 根据其他两个变量的值创建一个变量
- android - 检查用户是否登录了每个 Activity 和 Fragment onCreate 回调?
- java - 斯坦福 CoreNLP 在不应该的情况下将 2 个单独的实体识别为相同
- php - 找不到对象!在此服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试
- javascript - 为什么我无法在 dom 中得到 pascal tri 的结果