【问题标题】:OAuth with Office 365 SOAP returns "The audience claim value is invalid"使用 Office 365 SOAP 的 OAuth 返回“受众声明值无效”
【发布时间】:2019-04-17 23:21:06
【问题描述】:

我一直在尝试使用 OAuth 为 Web 应用程序集成 Office 365 Exchange 服务。我们已经进行了本地集成,并且此集成适用于基本 [用户名:密码] 身份验证和https://outlook.office365.com/EWS/Exchange.asmx

授权使用: https://login.microsoftonline.com//oauth2/authorize?response_type=code&prompt=consent&client_id=[APP_ID]&redirect_uri=[URL]

获取令牌使用: 邮政 https://login.microsoftonline.com//oauth2/token

身体: grant_type=authorization_code&code=[代码]&redirect_url=[URL]&scope=https://outlook.office365.com/calendars.readwrite

我能够成功获得令牌。

我在 Azure 应用注册上设置的应用权限是:

Microsoft Graph 权限 读写用户和共享日历 读取用户和共享日历 以用户身份发送邮件 阅读用户日历 拥有对用户日历的完全访问权限

Office 365 Exchange Online 权限 读取用户和共享日历 读写用户和共享日历 以用户身份发送邮件 阅读用户日历 读写用户日历

使用我获得的令牌,我正在尝试使用以下方式创建事件; https://outlook.office365.com/EWS/Exchange.asmx

标题:

  • POST /EWS/Exchange.asmx HTTP/1.1
  • 主机:outlook.office365.com
  • client_request_id:[random_guid]
  • 用户代理:APPName
  • 授权:不记名 [TOKEN]

正文:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<soap:Header>
    <t:RequestServerVersion Version="Exchange2016"/>
</soap:Header>
<soap:Body>
<m:CreateItem SendMeetingInvitations="SendToAllAndSaveCopy">
    <m:Items>
        <t:CalendarItem>
            <t:Subject>Test Event</t:Subject>
            <t:Body BodyType="HTML">Test Body</t:Body>
            <t:Start>2018-11-17T08:00:00.000</t:Start>
            <t:End>2018-11-17T09:00:00.000</t:End>
            <t:StartTimeZone Id="Pacific Standard Time"/>
            <t:EndTimeZone Id="Pacific Standard Time"/>
        </t:CalendarItem>
    </m:Items>
</m:CreateItem>

这是我收到的状态码为 401 的响应:

Server →Microsoft-IIS/10.0
request-id →b6d17647-5285-4c40-9087-3875958750b2
X-CalculatedFETarget →MWHPR1601CU001.internal.outlook.com
X-BackEndHttpStatus →401
X-BackEndHttpStatus →401
Set-Cookie →exchangecookie=947fe20a28e842068b3fe78a71b4e15b; path=/
X-FEProxyInfo →MWHPR1601CA0011.NAMPRD16.PROD.OUTLOOK.COM
X-CalculatedBETarget →MWHPR2001MB1823.namprd20.prod.outlook.com
X-RUM-Validated →1
x-ms-diagnostics →2000003;reason="The audience claim value is invalid 'aud'.";error_category="invalid_resource"
X-BeSku →Gen9
X-DiagInfo →MWHPR2001MB1823
X-BEServer →MWHPR2001MB1823
X-FEServer →MWHPR1601CA0011
X-FEServer →BYAPR05CA0077
X-Powered-By →ASP.NET
WWW-Authenticate →Bearer client_id="00000002-0000-0ff1-ce00-000000000000", trusted_issuers="00000001-0000-0000-c000-000000000000@*", token_types="app_asserted_user_v1 service_asserted_app_v1", authorization_uri="https://login.windows.net/common/oauth2/authorize", error="invalid_token",Basic Realm="",Basic Realm="",Basic Realm=""
Date →Wed, 14 Nov 2018 22:07:28 GMT
Content-Length →0

过去两天我一直在阅读和研究,但在其他开发人员尝试相同集成时找不到类似的东西。

你能建议吗? 也许有人可以解释我做错了什么。

谢谢!

【问题讨论】:

    标签: soap outlook office365 exchangewebservices


    【解决方案1】:

    使用 EWS,如果您尝试使用 AppOnly 令牌,您应该请求 https://outlook.office365.com/EWS.AccessAsUser.Allhttps://outlook.office365.com/full_access_as_app 的范围。其他受限范围对 EWS 无效,因为它在这方面有点遗留 API。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2019-01-03
    • 2016-12-23
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多