使用JWT Auth和现有的验证系统

时间:2016-02-19 12:26:37

标签: php authentication authorization jwt cartalyst-sentinel

所以,这是我第一次尝试在我的API中实现auth。我已经有了一个现有的身份验证系统 - Cartalyst Sentinel 2.0,现在要添加auth我正在使用JWT。 我所做的是:

  • 在登录时向客户端发送令牌。

  • 使用同时进行身份验证和授权的新中间件替换现有的身份验证sentinel中间件。

原始中间件:

$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有很多疑问。但这些都是第一位的。

0 个答案:

没有答案