【问题标题】:UnauthorizedException when connecting to exchange accounts using oauth2 - garethp - php-ews使用 oauth2 连接到交换帐户时出现 UnauthorizedException - garethp - php-ews
【发布时间】:2021-12-14 18:00:26
【问题描述】:

我使用 garethp php-ews 使用 oauth2 连接 EWS。我正在接收访问令牌,但是在将其传递给邮件函数(getMailItems、getMailbox、getFolder....等)时,出现“UnauthorizedException”的致命错误。尝试了很多方法,但还是一样。

致命错误:在 C:\xampp\htdocs\exchange\vendor\garethp\php-ews\src\API\ExchangeWebServices.php:453 堆栈跟踪:#0 C:中未捕获 garethp\ews\API\Exception\UnauthorizedException \xampp\htdocs\exchange\vendor\garethp\php-ews\src\API\ExchangeWebServices.php(368): garethp\ews\API\ExchangeWebServices->handleNonSuccessfulResponses(NULL, 401) #1 C:\xampp\htdocs\ exchange\vendor\garethp\php-ews\src\API\ExchangeWebServices.php(301): garethp\ews\API\ExchangeWebServices->processResponse(NULL) #2 C:\xampp\htdocs\exchange\vendor\garethp\php -ews\src\API.php(362): garethp\ews\API\ExchangeWebServices->__call('GetFolder', Array) #3 C:\xampp\htdocs\exchange\vendor\garethp\php-ews\src\ API.php(378): garethp\ews\API->getFolder(Array) #4 C:\xampp\htdocs\exchange\vendor\garethp\php-ews\src\Mail\MailAPI.php(22): garethp\ ews\API->getFolderByDistinguishedId('inbox') #5 C:\xampp\htdocs\exchange\vendor\garethp\php-ews\src\Mail\MailAPI.php(81): garethp\ews\Mail\MailAPI-> getFolderId() #6 C:\xampp\htdocs\exchange\te stSync.php(50): garethp\ews\Mail\MailAPI 在 C:\xampp\htdocs\exchange\vendor\garethp\php-ews\src\API\ExchangeWebServices.php 在第 453 行

这里是传递的参数:

 $tokenEndpoint = 'https://login.microsoftonline.com/common/oauth2/v2.0/token';
 $authorizationEndpoint = 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize';
 $clientId = '********';
 $clientSecret = '********';
 $redirectUri = 'http://localhost/testredirect.php';
 $scope = 'https://outlook.office.com/Mail.Read';

还尝试使用图形 API:$scope = 'https://graph.microsoft.com/Mail.Read';

这是我拥有的 API 权限:

【问题讨论】:

    标签: php oauth-2.0 exchangewebservices php-ews


    【解决方案1】:

    只有两个范围适用于 EWS 以进行委托访问

    • EWS.AccessAsUser.All

    仅适用于应用程序(客户端凭据流)

    • full_access_as_app

    https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an-ews-application-by-using-oauth

    EWS 不支持 Microsoft Graph 支持的更受限制的范围,即您引用的权限,从安全的角度来看,这是您通常选择 Graph 而不是 EWS 的原因。

    【讨论】:

    • 感谢您的回答。我尝试使用从docs.microsoft.com/en-us/exchange/client-developer/… 获得的详细信息更新清单,但收到此错误“无法更新 UPilot 本地应用程序。错误详细信息:请求中指定的所需资源访问无效。请检查资源 ID 和权限 ID 并重试。[6pfyR7SvXS5Dv4hBRcM8Fd] "
    • 如果您选择“我的组织使用的 API”,然后选择 Office 365 Exchange Online,请尝试通过门户添加它
    • 尽我所能尝试了所有可能的事情。但我得到了同样的错误。
    • 致命错误:C:\xampp\htdocs\exchange\vendor\garethp\php-ews\src\API\ExchangeWebServices.php:454 中未捕获的 garethp\ews\API\Exception\UnauthorizedException 堆栈跟踪: #0 C:\xampp\htdocs\exchange\vendor\garethp\php-ews\src\API\ExchangeWebServices.php(367): garethp\ews\API\ExchangeWebServices->handleNonSuccessfulResponses(NULL, 401)
    猜你喜欢
    • 2017-10-28
    • 2020-08-19
    • 1970-01-01
    • 2020-10-14
    • 2013-01-15
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多