我正在使用LARAVEL PHP应用程序试图从Microsoft GRAPH API获取令牌。 实际上,我可以使用 OAuth2授权代码授予方法轻松获取令牌。
这是方法:https://github.com/microsoftgraph/microsoft-graph-docs/blob/master/concepts/php.md
但是使用此方法是将浏览器重定向到Microsoft身份验证网页,我不希望这样。我想要一个透明的方法,没有任何浏览器重定向。
以下是获取令牌的所有Oauth2授权方法: https://alexbilbie.com/guide-to-oauth-2-grants
所以我想通过使用“资源所有者凭据授权”来获取令牌。这是我的代码:
$provider = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId' => 'b9e6844b-b20c-4eef-bbff-fa052c1c0f94',
'clientSecret' => '1A8yUUcMaD5Zdv1dgwqy3SR',
'redirectUri' => 'https://my-website-url/oauth',
'urlAuthorize' => 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
'urlAccessToken' => 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
'urlResourceOwnerDetails' => '',
'scopes' => 'openid email profile' // Admin restricted scopes : Directory.Read Directory.ReadWrite Groups.Read.All
]);
$accessToken = $provider->getAccessToken('password',[
'username' => 'myaccount@assystem.com',
'password' => 'xxxxx'
]);
但是我收到了以下错误:
(1/1)IdentityProviderException invalid_grant 在GenericProvider.php中(第217行)
任何帮助?
答案 0 :(得分:0)
收到错误异常后,我知道为什么会出现此错误:
try {
// Try to get an access token using the resource owner password credentials grant.
$accessToken = $provider->getAccessToken('password', [
'username' => 'myapp@assystem.com',
'password' => 'mypassword'
]);
} catch (\League\OAuth2\Client\Provider\Exception\IdentityProviderException $e) {
// Failed to get the access token
throw $e;
}
' ERROR_DESCRIPTION' => ' AADSTS70000:此API版本不支持此授权...(Microsoft Graph API)