LARAVEL PHP应用程序中的Microsoft Graph - oauth2 grant方法'password'

时间:2017-10-23 10:41:34

标签: laravel api graph oauth-2.0 access-token

我正在使用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行)

任何帮助?

1 个答案:

答案 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)