更新事件不适用于 EWS 访问被拒绝

Posted

技术标签:

【中文标题】更新事件不适用于 EWS 访问被拒绝【英文标题】:Update event does not work with EWS Access Denied 【发布时间】:2016-03-02 13:28:46 【问题描述】:

我正在使用 EWS 从应用程序创建会议。有肥皂请求

  
   "body":  
      "m:CreateItem":  
         "attributes":[  
              
               "SendMeetingInvitations":"SendToAllAndSaveCopy"
            
         ],
         "m:Items":[  
              
               "t:CalendarItem":  
                  "t:Subject":"Booked from application",
                  "t:Body":  
                     "attributes":[  
                          
                           "BodyType":"Text"
                        
                     ],
                     "value":"Meeting body"
                  ,
                  "t:Start":"2016-03-02T13:11:59+00:00",
                  "t:End":"2016-03-02T13:45:00+00:00",
                  "t:Location":"room1",
                  "t:RequiredAttendees":[  
                       
                        "t:Attendee":  
                           "t:Mailbox":  
                              "t:EmailAddress":"room1@testdomain.onmicrosoft.com"
                           
                        
                     
                  ]
               
            
         ]
      
   ,
   "headers":  
      "Authorization":"Basic somestringsdafsdfsdfsdfsdfsf"
   ,
   "additionalNamespaces":[  
      "xmlns:m=\"http://schemas.microsoft.com/exchange/services/2006/messages\"",
      "xmlns:t=\"http://schemas.microsoft.com/exchange/services/2006/types\""
   ],
   "soapHeader":  
      "t:ExchangeImpersonation":  
         "t:ConnectingSID":  
            "t:PrincipalName":"test007@testdomain.onmicrosoft.com"
         
      
   ,
   "method":"POST",
   "url":"https://outlook.office365.com/EWS/Exchange.asmx"

我也在尝试通过应用程序编辑会议持续时间,它也可以正常工作。使用 SOAP 请求:

  
   "body":  
      "m:UpdateItem":  
         "attributes":[  
              
               "SendMeetingInvitationsOrCancellations":"SendToAllAndSaveCopy"
            ,
              
               "MessageDisposition":"SaveOnly"
            ,
              
               "ConflictResolution":"AlwaysOverwrite"
            
         ],
         "m:ItemChanges":  
            "t:ItemChange":  
               "t:ItemId":  
                  "attributes":[  
                       
                        "Id":"AAApAHJvb20xQGNlcnR1c2ludGVybmF0aW9uYWwub25taWNyb3NvZnQuY29tAEYAAAAAAMWslF/s3JlHvuBz+Grw4nkHAMq37IYLqfhKh5oHo2fodacAAAAAAQ0AAMq37IYLqfhKh5oHo2fodacAAFweeHQAAA=="
                     ,
                       
                        "ChangeKey":"DwAAABYAAADKt+yGC6n4SoeaB6Nn6HWnAABcIvBS"
                     
                  ]
               ,
               "t:Updates":  
                  "t:SetItemField":  
                     "t:FieldURI":  
                        "attributes":[  
                             
                              "FieldURI":"calendar:End"
                           
                        ]
                     ,
                     "t:CalendarItem":  
                        "t:End":"2016-03-02T15:00:00+00:00"
                     
                  
               
            
         
      
   ,
   "headers":  
      "Authorization":"Basic somestringssdasasfasfasfasfaf"
   ,
   "additionalNamespaces":[  
      "xmlns:m=\"http://schemas.microsoft.com/exchange/services/2006/messages\"",
      "xmlns:t=\"http://schemas.microsoft.com/exchange/services/2006/types\""
   ],
   "soapHeader":  
      "t:ExchangeImpersonation":  
         "t:ConnectingSID":  
            "t:PrincipalName":"test007@testdomain.onmicrosoft.com"
         
      
   ,
   "method":"POST",
   "url":"https://outlook.office365.com/EWS/Exchange.asmx"

当我使用 Exchange Web 界面从 outlook.office.com 创建会议时,问题就开始了。我收到错误消息:

访问被拒绝。检查凭据并重试。,无法从中获取 ID 名字。

除了更改键之外,SOAP 请求是相同的。我读过一些类似的问题,这可能是由于日历上的权利。我不太清楚。

您能否就这个问题提出建议。

编辑:

  
   "t:ExchangeImpersonation":  
      "t:ConnectingSID":  
         "t:PrimarySmtpAddress":"test007@testdomain.onmicrosoft.com"
      
   

【问题讨论】:

【参考方案1】:

您的模拟标头可能是您尝试访问的邮箱 test007 还是您使用的服务帐户?

我建议您使用 PrimarySMTPAddress 来确保您指定要访问的邮箱而不是用户,例如

      "t:ExchangeImpersonation":  
     "t:ConnectingSID":  
        "t:PrimarySmtpAddress":"test007@testdomain.onmicrosoft.com"
     

当你说

当我使用 Exchange Web 界面从 outlook.office.com 创建会议时,问题就开始了。我收到消息错误

您的意思是您在 Outlook Web App 或您的代码中遇到错误?

干杯 格伦

【讨论】:

问题出在我的应用程序中,当尝试更新通过 Outlook 创建的会议时。在我的应用程序中创建的会议可以毫无错误地更新。谢谢。 这听起来像是您尝试更新约会而不是您的代码不是所有者,为什么使用 PrimarySMTP 是一个更好的主意,在共享邮箱的情况下,您可能需要查看 Organizer的任命,然后模拟特定的组织者。 请检查我的编辑。它报告与您建议的更改相同的错误。谢谢。 我想我可能知道为什么这不起作用。你能检查我上次的编辑吗?谢谢。

以上是关于更新事件不适用于 EWS 访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

重新访问 MySQL 访问被拒绝

php 事件订阅者:重定向403访问被拒绝的内核异常

访问路径被拒绝(Xamarin/Android)

Android:Google Play 控制台应用更新因违反政策而被拒绝:所有文件访问权限

对端口Com1的访问被拒绝

添加文档访问被拒绝