2017-04-01 78 views
0

使用this oauth2 library for PHP,我通过client_credentials验证用户是这样的:的oauth2服务器的PHP不返回刷新标记

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?

回答

0

这是一个正常的行为。 使用Client Credentials授权类型刷新令牌是没有用的,因为客户端可以通过在需要时询问新的令牌来获得新的访问令牌。

此外,我发现a closed issue您所使用的图书馆的作者清楚地解释说,这里没有错误。

正如在这个答案中提到的,你会发现在RFC6749 section 4.4.3refresh token SHOULD NOT be included。您也可以阅读this question and the accepted answer

+0

完美。 [这个其他答案](http://stackoverflow.com/questions/29233772/why-is-a-refresh-token-not-provided-by-oauth2-servers-responding-to-a-client-cr)也是这个问题很好的资源。 – lilbiscuit

0

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

+0

那里会被设置?我尝试了这一点,但得到500服务器错误:'$服务器=新的OAuth2 \服务器($存储,[ 'access_lifetime'=> 3600,// 1小时 'refresh_token_lifetime'=> 50400,// 14天 'access_type' =>'offline' ]);' – lilbiscuit