所以,这是我第一次尝试在我的 API 中实现身份验证。我已经有一个现有的身份验证系统 - Cartalyst Sentinel 2.0,现在要添加身份验证,我正在使用 JWT。我所做的是:
在登录时向客户端发送令牌。
将现有的身份验证哨兵中间件替换为同时进行身份验证和授权的新中间件。
原始中间件:
$authenticateForLogin = function ($app, $user) {
return function () use ($app, $user) {
if ( Sentinel::check() === false ) {
$app->response()->status(401);
$app->stop();
}
};
};
新中间件:
$checkForAuthorization = function ($app, $user) {
return function () use ($app, $user) {
if ( Sentinel::check() === false ) {
$app->response()->status(401);
$app->stop();
} else {
$authHeader = apache_request_headers()["Authorization"];
if ($authHeader) {
$jwt = str_replace("Authorization: Bearer ", "", $authHeader);
if ($jwt) {
try {
$secretKey = base64_decode(getDbConfig()["AUTH_SECRET"]);
$token = JWT::decode($jwt, $secretKey, array('HS512'));
header('Content-type: application/json');
echo json_encode([
'message' => "Auth Test Successful"
]);
} catch (Exception $e) {
//some action
}
} else {
//some action
}
} else {
//some action
}
}
};
};
所以我的问题是——
这是正确的方法吗?我的印象是身份验证和授权是两个独立的过程。这有任何安全漏洞吗?
Sentinel 身份验证是 cookie,基于会话的系统。那么在上面使用 JWT 之类的东西好吗?还是我也应该使用 JWT 进行身份验证(还不知道如何)?
我对 Auth/JWT 有很多疑问。但这些是第一位的。