日历 ID 随机更改

问题描述

使用microsoft graph时,日历更改其id的原因是什么???

今天我们的一位客户发生了这种情况,他使用了他的主日历超过 2 年,今天突然,id 发生了变化,我们无法添加任何事件,因为我们拥有“旧”id

调用的端点:

/me/calendars/AAMkAGFmMzAxNmRkLTg4YTEtNDNhZS1iYjExLWE1OThlYThlNTRmOQBGAAAAAACxNL6zUoo_Qr9AY8vFoIfmBwBstbpyrelbSJu1keAu6bMkAAAAAAEGAABstbpyrelbSJu1keAu6bMkAAAAAFB8AAA=/events

返回错误

{
  "error": {
    "code": "ErrorItemNotFound","message": "The specified object was not found in the store."
  }
}

标题

{
  "Cache-Control": [
    "private"
  ],"Content-Type": [
    "application/json; odata.Metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8"
  ],"request-id": [
    "63353567-4ebd-4b25-903b-d66717797882"
  ],"client-request-id": [
    "63353567-4ebd-4b25-903b-d66717797882"
  ],"x-ms-ags-diagnostic": [
    "{\"ServerInfo\":{\"DataCenter\":\"north Europe\",\"Slice\":\"SliceC\",\"Ring\":\"4\",\"ScaleUnit\":\"001\",\"RoleInstance\":\"AGSFE_IN_6\"}}"
  ],"Strict-Transport-Security": [
    "max-age=31536000"
  ],"Date": [
    "Thu,04 Feb 2021 10:40:39 GMT"
  ],"Content-Length": [
    "99"
  ]
}

新日历 ID:AAMkAGFmMzAxNmRkLTg4YTEtNDNhZS1iYjExLWE1OThlYThlNTRmOQBGAAAAAACxNL6zUoo_Qr9AY8vFoIfmBwBstbpyrelbSJu1keAu6bMkAAAAAAEGAABstbpyrelbSJu1keAu6bMkAAF8qLRIAAA=

编辑:(发生在另一个客户身上) 今天又发生在另一个客户(另一个租户 ID)上,详情如下:

旧日历 ID:

AAMkAGI2Y2NkYzVmLTc3ZjUtNDQyNi1iNjIzLTljNjkyMDk5YjEyYwBGAAAAAADQqVqZh-ZpQJl-EcoJBivzBwCE3CCn1SYkSLnEBiNMaH3ZAAAAAAEGAACE3CCn1SYkSLnEBiNMaH3ZAAAAAB08AAA=
{
   "Cache-Control":[
      "private"
   ],"Content-Type":[
      "application\/json; odata.Metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8"
   ],"request-id":[
      "2f9ddb93-3594-4d86-97f9-d7dbe960a2bb"
   ],"client-request-id":[
      "2f9ddb93-3594-4d86-97f9-d7dbe960a2bb"
   ],"x-ms-ags-diagnostic":[
      "{\"ServerInfo\":{\"DataCenter\":\"north Europe\",\"RoleInstance\":\"AGSFE_IN_71\"}}"
   ],"Strict-Transport-Security":[
      "max-age=31536000"
   ],"Date":[
      "Mon,08 Feb 2021 11:08:53 GMT"
   ],"Content-Length":[
      "99"
   ]
}

新日历 ID:

AAMkAGI2Y2NkYzVmLTc3ZjUtNDQyNi1iNjIzLTljNjkyMDk5YjEyYwBGAAAAAADQqVqZh-ZpQJl-EcoJBivzBwCE3CCn1SYkSLnEBiNMaH3ZAAAAAAEGAACE3CCn1SYkSLnEBiNMaH3ZAAGPkTa6AAA=

解决方法

这是一个谜题……那些看起来是 Base64 编码的。如果您对旧 ID 和新 ID 进行 Base 64 解码,您会发现其中嵌入了相同的 GUID。

(使用https://www.base64decode.org/

Old decoded: $af3016dd-88a1-43ae-bb11-a598ea8e54f9F4R?B@cŠlr[H.$lr[H.$P|
New decoded: $af3016dd-88a1-43ae-bb11-a598ea8e54f9F4R?B@cŠlr[H.$lr[H.$|H
(guid: af3016dd-88a1-43ae-bb11-a598ea8e54f9)
- 
2nd example provided 
Old decoded: $b6ccdc5f-77f5-4426-b623-9c692099b12cFЩZi@~    + &$H#Lh} &$H#Lh}<
New decoded: $b6ccdc5f-77f5-4426-b623-9c692099b12cFЩZi@~    + &$H#Lh} &$H#Lh}6
(guid: b6ccdc5f-77f5-4426-b623-9c692099b12c)

如果无法通过图形请求中的查询使用嵌入式 GUID,那么可能调用 https://graph.microsoft.com/v1.0/me/calendars,解码所有日历,找到具有匹配嵌入式 GUID 的 ID,然后使用那个?它会添加一个额外的调用,但您可能可以在异常处理中执行此操作,因为不需要状态。这可能对您现有的应用程序有所帮​​助。

我不能保证这会起作用,因为我没有随时间推移的数据来测试这个理论......但你做:)

为了避免以后发生 ID 更改时出现此问题,请尽可能考虑存储 immutable IDs。您无法将它们存储在容器(日历、邮箱等)中,但也许可以继续为应用程序创建的事件存储它们,以便您可以从那里向后工作。

容器类型(邮件文件夹、日历等)不支持不可变 ID,但它们的常规 ID 已经是恒定的。

他们文档中的这一行值得注意,因为您的体验与他们的文档声明不符。这让您可以向 MS 投诉,或向您的客户投诉 IBM(IBM:我责怪微软)。

此外,我会问两个组织的 IT 是否更改了与 AAD 同步或 Exchange 相关的任何内容?我有一个与此相关的疯狂理论。最近有一封电子邮件要求人们更新 AAD 同步,而这种模式对于某种身份验证提供程序的更改感觉很熟悉。

,

问题不是日历 id 改变了。看起来你只需要处理它,并且你有一个很好的方法来找到新的 Id,如上面的评论中所述。

问题是您在应用中使用了 Microsoft 生成的 ID,但现在它们不匹配。完全可以向事件(或用户/组)添加额外数据。有关详细信息,请参阅 this 页。这样,您只需在创建活动时将外部 ID 添加到活动中,您就可以随时找回活动。