Oauth 2.0 Microsoft图形刷新令牌请求失败。。。AADSTS70000
我正在使用league/oauth客户端和guzzle在Slim3网络应用程序中与Microsoft Graph一起工作。。。我无法通过给定的刷新令牌成功请求新令牌 这是我的league/oauth客户端di容器: $container['oauthprovider']=函数 { $provider=new\League\OAuth2\Client\provider\GenericProvider [ 'clientId'=>getenv'ENV_CLIENT_ID', 'clientSecret'=>getenv'ENV_CLIENT_SECRET', 'redirectUri'=>getenv'ENV_REDIRECT_URL', 'urlAuthorize'=>getenv'ENV_AUTHORIZE_URL', 'urlAccessToken'=>getenv'ENV_URL_ACCESS_TOKEN', “urlResourceOwnerDetails”=>, 'scopes'=>'offline_access user.read people.read user.read.all openid mail.send' ] ; 返回$provider; }; 工作正常-在重定向后的Slim3路线中,我获得了所有令牌、刷新令牌等 $provider=$this->oauthprovider; $CODE=filter\u var$\u GET['CODE'],filter\u SANITIZE\u FULL\u SPECIAL\u CHARS; $accessToken=$provider->getAccessToken‘授权\代码’, ['code'=>$code] ; ... $existingAccessToken=$accessToken->getToken; $refreshToken=$accessToken->getRefreshToken; $expiresIn=$accessToken->getExpires; $expired=$accessToken->hasExpired?真:假; $client=$this->guzzle; ... 如果我尝试在这一点上刷新我的令牌-在相同的Slim3路径中-它工作正常: $newAccessToken=$provider->getAccessToken'refresh\u token'[ “刷新令牌”=>$accessToken->getRefreshToken, '授权\u类型'=>'刷新\u令牌' ]; 但这不是我的目标-我必须通过另一条Slim3路线达到过期的生命周期(1小时)来刷新令牌: $accessToken=unserialize$session->get'serialized_token'; $refreshToken=unserialize$session->get'serialized_refresh_token'; $code=$session->get'code'; $provider=$this->oauthprovider; $client=$this->guzzle; ... $req=$client->request'POST', 'https://login.windows.net/common/oauth2/token', [ “表单参数”=>[ '接受'=>'应用程序/json', “授权类型”=>“刷新令牌”, 'client_id'=>getenv'ENV_client_id', 'client_secret'=>getenv'ENV_client_secret', “刷新令牌”=>字符串$refreshToken, 'redirect_uri'=>getenv'ENV_redirect_URL' ] ]; 答复如下: 客户端错误:POSThttps://login.windows.net/common/oauth2/token 导致400个错误的请求响应:{错误:无效的授权,错误描述:AADSTS70000:传输数据解析器失败:刷新令牌格式错误,已截断 刷新令牌与我在初始请求中得到的完全相同Oauth 2.0 Microsoft图形刷新令牌请求失败。。。AADSTS70000,oauth-2.0,microsoft-graph-api,guzzle,slim-3,refresh-token,Oauth 2.0,Microsoft Graph Api,Guzzle,Slim 3,Refresh Token,我正在使用league/oauth客户端和guzzle在Slim3网络应用程序中与Microsoft Graph一起工作。。。我无法通过给定的刷新令牌成功请求新令牌 这是我的league/oauth客户端di容器: $container['oauthprovider']=函数 { $provider=new\League\OAuth2\Client\provider\GenericProvider [ 'clientId'=>getenv'ENV_CLIENT_ID', 'clientSecre
任何有oauth client/guzzle/Microsoft Graph经验的人-我的错误是什么/哪里?既然您使用的是v2端点,您的帖子应该是https://login.microsoftonline.com/common/oauth2/v2.0/token 您的有效负载应包括scope属性: $req=$client->request'POST', 'https://login.microsoftonline.com/common/oauth2/v2.0/token', [ “表单参数”=>[ “授权类型”=>“刷新令牌”, 'client_id'=>getenv'ENV_client_id', 'client_secret'=>getenv'ENV_client_secret', “刷新令牌”=>字符串$refreshToken, 'redirect_uri'=>getenv'ENV_redirect_URL', 'scope'=>'offline_access user.read people.read user.read.all openid mail.send' ] ];
例如,如果我通过以下方式请求使用我的league/oauth客户端和guzzle的Microsoft Graph:
$request = $client -> request('GET', "https://login.microsoftonline.com/common/oauth2/v2.0/token", [
'form_params' => [
'accept' => 'application/json',
'grant_type'=> 'refresh_token',
'client_id' => getenv('ENV_CLIENT_ID'),
'client_secret' => getenv('ENV_CLIENT_SECRET'),
'refresh_token' => (string) $refreshToken,
'redirect_uri' => getenv('ENV_REDIRECT_URL')
]
]);
$response = json_decode($request -> getBody() -> getContents(), true);
echo 'Response: ';
var_dump($response);
exit;
响应包含以下信息:
Response: array(7) {
["token_type"]=>
string(6) "Bearer"
["scope"]=>
string(45) "Mail.Send People.Read User.Read User.Read.All"
["expires_in"]=>
int(3599)
["ext_expires_in"]=>
int(0)
["access_token"]=>
string(1901) "...f8SQPrPFsg66q8vHLGM4Q..."
["refresh_token"]=>
string(847) "...cEksGS9XfHIqTH2LUYL..."
["id_token"]=>
string(928) "...KKWAUtlyS0p5rDWILr..."
}
有了这些信息,我可以续订我的应用程序令牌和刷新令牌,并继续请求Microsoft Graph端点
谢谢你,Marc!太好了!请不要使用亵渎。是的,我这样做了,Marc。我请求端点。我对访问令牌的初始请求工作正常。问题是在第一个访问令牌过期后,在不同的Slim3路由中使用我的初始刷新令牌获取新的访问令牌。我不知道问题是否为league/oauth客户端、Slim DI容器或其他…?Thanx Marc,我的请求https://login.microsoftonline.com/common/oauth2/v2.0/token 工作正常-响应包含一个新令牌和一个新刷新令牌。