安全身份验证在线/离线应用程序


PHP: Secure Authentication ONLINE/OFFLINE application

我正在使用php Slim Framework + Eloquent ORM和AngularJS创建一个基于rest的应用程序。我想在我的应用程序中创建一个安全的身份验证系统,这样它就可以在两个环境(ONLINE/OFFLINE)中运行。实际上我担心的是离线模式,如果任何客户复制我的代码并粘贴到另一个计算机系统,那么它将没有任何问题。所以我想防止这种情况发生在每次应用程序第一次启动时它都会验证用户密钥然后应用程序会打开否则会显示"未授权用户"

请给我一些使用PHP构建桌面/离线应用程序的建议。

这是我的代码,我目前使用在线模式…当软件处于离线状态(因为互联网连接)时,它会失败。

// route middelware for simple API authentication
function authenticate('Slim'Route $route) {
    $app = 'Slim'Slim::getInstance();
    $uid = $app->request->headers("uid"); //$app->getEncryptedCookie('uid');
    $username = $app->request->headers("username"); 
    $password = $app->request->headers("password"); 
    $key = $app->request->headers("key"); 
    if(validateUserKey($uid, $key) === false) {
        $app->halt(401, "Unauthorize User");
        if(validateUserLogin($username, $password) === false) {
            $app->halt(200, "Invalid Username and Password");
        }
    }   
}
function validateUserKey($uid, $key) {
    // I am maintaining a table which has my client list with the API key so 
    // this function will hit a url to my server like(www.dev-server.com/validateKey?uid=$uid&key=$key) for authentication
}
function validateUserLogin($username, $password) {
    //it will validate the uname and password in from local DB
} 

由于PHP是一种服务器端语言,我假设您不想让您的用户在没有互联网连接的情况下运行他们自己的web服务器来使用您的应用程序,PHP在这里并不是真正的一部分。

也就是说;如果你想让你的用户在没有互联网连接的情况下继续使用你的应用程序,你必须在你的客户端应用程序中解决你的问题,即使用HTML、Javascript和本地存储。你的问题不够具体,不能告诉你怎么做,但谷歌是你的朋友。

关于用户认证;由于客户端基本上不在你的控制范围之内,我建议你把重点放在服务器端的安全性上;例如,要求一次Internet连接进行身份验证,将凭据保存在本地缓存中,并允许用户在脱机时使用您的应用程序而无需进一步检查,然后在他们重新联机并希望将脱机更改推回服务器时要求他们重新进行身份验证。

如果没有更多关于你的应用程序和它是如何被使用的信息,很难确切地说如何去做,希望我的想法可以帮助。