如何设置密码授予类型的OAuth2.0服务器的回调函数


How do I set a callback function for an OAuth2.0 Server with Password Grant Type?

我想知道是否有人可以帮助我,我如何设置密码授予类型回调?我有一个工作的OAuth2.0提供程序服务器在我的本地主机上运行,我只需要在请求访问令牌时验证用户的凭据。

我想我只需要设置一个回调函数。下面是我的代码:

$app->setService('oauth', function() use ($config) {   
    $oauthdb = new 'Twm'Db'Adapter'Pdo'Mssql(
            $config
            ->database
            ->oauth
            ->toArray()
    );
    $server = new 'League'OAuth2'Server'Authorization(
        new 'Oauth2'Server'Storage'Pdo'Mssql'Client($oauthdb),
        new 'Oauth2'Server'Storage'Pdo'Mssql'Session($oauthdb),
        new 'Oauth2'Server'Storage'Pdo'Mssql'Scope($oauthdb)
    );
    $request = new 'Oauth2'Server'Storage'Pdo'Mssql'Request(); 
    $server->setRequest($request);
    // do i set a callback here???
    $server->setAccessTokenTTL(86400);
    $server->addGrantType(new League'OAuth2'Server'Grant'Password($server));
    return $server;
});
如果有人能帮助我,我很感激,谢谢!

所以我在这里阅读了这个主题:https://github.com/thephpleague/oauth2-server/issues/97看起来我确实需要设置某种回调函数来验证用户。我只是需要一点帮助。

感谢Alex,我实现了下面的密码验证例程,并且它工作了。

$app->setService('oauth', function() use ($config, $app) {   
    $oauthdb = new 'Twm'Db'Adapter'Pdo'Mssql(
        (array) $config->database->oauth
    );
    $server = new 'League'OAuth2'Server'Authorization(
        new 'Oauth2'Server'Storage'Pdo'Mssql'Client($oauthdb),
        new 'Oauth2'Server'Storage'Pdo'Mssql'Session($oauthdb),
        new 'Oauth2'Server'Storage'Pdo'Mssql'Scope($oauthdb)
    );
    # Not required as it called directly from original code
    # $request = new 'League'OAuth2'Server'Util'Request();
    # add these 2 lines code if you want to use my own Request otherwise comment it
    $request = new 'Oauth2'Server'Storage'Pdo'Mssql'Request(); 
    $server->setRequest($request);
    $server->setAccessTokenTTL(86400);        
    $grant = new League'OAuth2'Server'Grant'Password();
    $grant->setVerifyCredentialsCallback(function($username, $password){
        //echo "it works! ". $username . ' : ' . $password;        
        // if verified, then return true
        // else return false
    });
    $server->addGrantType($grant);        
    return $server;
});

您需要在grant上调用setVerifyCredentialsCallback($callback)方法。

所以稍微修改一下你的代码:
$request = new 'Oauth2'Server'Storage'Pdo'Mssql'Request(); 
$server->setRequest($request);
$server->setAccessTokenTTL(86400);
$grant = new League'OAuth2'Server'Grant'Password($server);
$grant->setVerifyCredentialsCallback(function ($username, $password) {
   // your logic here - must return a user ID if credentials are valid or false if not
});
$server->addGrantType();
return $server;