【问题标题】:Exchange 2016 on-premise mailbox access using Graph API (Hybrid Setup)使用 Graph API(混合设置)访问 Exchange 2016 本地邮箱
【发布时间】:2019-07-22 17:59:43
【问题描述】:

我在本地交换服务器(处于混合模式)abc@onprem.com 中有一个邮箱,我正在尝试通过图形 api (/messages) 访问它。如果我在图形资源管理器中执行此操作,这将非常有效,但是当我通过实现执行此操作时会失败。

在 Azure 应用注册门户中提供了所需的应用程序权限。 实现使用 grant_type 作为带有证书的 client_credentials,这非常适合云用户。

API 响应

{ 'error': {
    'innerError': {
        'date': '2019-02-28T14:17:45', 
        'request-id': '6a85f8c3-4e13-4cf0-84b2-ddc934241afd'
    },
    'message': '', 
    'code': 'UnknownError'
    }}

IIS 日志

  1. 来自图形浏览器的电话

2019-02-28 15:02:31 172.31.10.98GET /api/V2.0/Users('abc@onprem.com')/Messages/$count &CorrelationID=;&cafeReqId=bc8e8aef-de46-4c72- bcf4-b4f567bc45dd; 443 S-1-5-21-1392771109-4043059535-3934338706-1147 20.190.145.177Mozilla/5.0+(Macintosh;+Intel+Mac+OS+X+10_14_3)+AppleWebKit/537.36+(KHTML,+like+Gecko) +Chrome/71.0.3578.80+Safari/537.36 - 200 0 0 287

  1. 用于来自已实施应用的调用

2019-02-28 15:00:05 172.31.10.98GET /api/V2.0/Users('abc@onprem.com')/Messages/$count &CorrelationID=;&cafeReqId=c504b658-b9df-43b5- 9dbb-8e83050c3d2f; 443 - 20.190.128.103- - 401 0 0 102

  1. 此身份验证失败的原因是什么,可能是因为该令牌是由 azure AD 提供的,它是 已针对本地进行身份验证?

更新

添加了一些更多的日志记录头,发现下面是错误。

2019-03-04 04:05:13 172.31.10.98 GET /api/V2.0/Users('abc@onprem.com')/Messages &CorrelationID=;&cafeReqId=2823c302-3c84-4847-b586-accced4b6dd5 ; 443 - 20.190.145.177 PostmanRuntime/7.6.0 - 401 0 0 332 Bearer+eyJ0 blah blah.....blah blah.....hSd mail.onprem.com - - - Bearer+client_id="00000002-0000- 0ff1-ce00-000000000000",+token_types="app_asserted_user_v1+service_asserted_app_v1",+authorization_uri="https://login.windows.net/common/oauth2/authorize",+error="invalid_token" 2000001;reason="This+ token+profile+'V1S2SAppOnly'+is+not+applicable+for+the+current+protocol.";error_category="invalid_token"

我们在交换服务器上使用自签名证书,这会导致这个问题吗?如果想知道图形浏览器中的一切是如何工作的。

【问题讨论】:

    标签: azure-active-directory microsoft-graph-api exchange-server-2016 azure-hybrid-connections microsoft-graph-mail


    【解决方案1】:

    问题实际上出在其他地方 - Exchange 似乎不支持 client_credentials 流。但是,您可以通过以下 PowerShell 强制执行此操作(确保在应用后重新启动 IIS):

    $apps = Get-PartnerApplication
    # Microsoft Graph is 2nd item in the array, if you are unsure, list the items by calling $apps first
    $apps[1] | Set-PartnerApplication -AppOnlyPermissions $apps[1].ActAsPermissions
    

    完整的解释可以在这里找到:https://blog.thenetw.org/2019/05/13/using-client_credentials-with-microsoft-graph-in-hybrid-exchange-setup/

    【讨论】:

    • 我记得做过以上所有事情(这里提到)[链接]stackoverflow.com/questions/54932152/…。但是,但是我上次执行 Set-PartnerApplication 失败,出现以下错误。如何克服它?找不到与参数名称“AppOnlyPermissions”匹配的参数。 + CategoryInfo : InvalidArgument: (:) [Set-PartnerApplication], ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,Set-PartnerApplication + PSComputerName : xxx
    • 您有什么版本的 Exchange?我在 EX2016 上这样做
    • 我也尝试过交换版本 16。版本:标准 AdminDisplayVersion:版本 15.1(内部版本 1591.10)
    • 这意味着您在 Exchange Server 2016 CU11 上。我将不得不检查客户在生产中运行什么,但我认为这是类似的。无论哪种方式,都会有一种方法可以将其直接放入数据库中。请给我几天时间弄清楚。
    • 我已经检查了我的环境 - 它是 Exhange 2016 CU12 - 1713.5,您可以尝试安装 CU12 并尝试一下吗?
    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2022-05-24
    • 1970-01-01
    • 2018-03-09
    • 2013-12-02
    • 1970-01-01
    • 2011-03-28
    • 2016-10-17
    相关资源
    最近更新 更多