【问题标题】:oauth2-server-php not returning refresh tokenoauth2-server-php 不返回刷新令牌
【发布时间】:2017-04-02 20:25:01
【问题描述】:

使用 this oauth2 library for PHP,我正在通过 client_credentials 验证用户,如下所示:

server.php

$server = new OAuth2\Server($storage, [
'access_lifetime' => 3600, // 1 hour
'refresh_token_lifetime' => 50400, // 14 days
]);

$server->addGrantType(new OAuth2\GrantType\ClientCredentials($server->getStorage('client_credentials'), ['always_issue_new_refresh_token' => true])));

然后在我的端点(token.php):

require_once __DIR__.'/server.php';    
$request = OAuth2\Request::createFromGlobals();
$server->handleTokenRequest($request)->send(); //returns the token object

虽然返回了新的access_token,但没有返回refresh_token:

{"access_token":"501a3d087db7532d4e4350402f9a5da332d71dfc","expires_in":3600,"token_type":"Bearer","scope":null}

如何获得 refresh_token?

【问题讨论】:

    标签: php oauth oauth-2.0


    【解决方案1】:

    这是正常行为。 对于客户端凭据授权类型,刷新令牌是无用的,因为客户端可以通过在需要时询问新的访问令牌来获取新的访问令牌。

    此外,我发现a closed issue,您使用的库的作者清楚地解释了这里没有错误。

    正如这个答案中提到的,您会在RFC6749 section 4.4.3 中找到refresh token SHOULD NOT be included。

    您也可以阅读this question and the accepted answer。

    【讨论】:

    【解决方案2】:

    您必须在 OAuth2 选项中指定 accessType: 'offline' 才能接收刷新令牌。如果前者不起作用,请尝试access_type: 'offline'。

    【讨论】:

    • 设置在哪里?我试过这个但得到 500 服务器错误:$server = new OAuth2\Server($storage, [ 'access_lifetime' => 3600, // 1 hour 'refresh_token_lifetime' => 50400, // 14 days 'access_type' => 'offline' ]);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2012-07-21
    • 2012-12-27
    相关资源
    最近更新 更多