问题描述
使用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 添加到活动中,您就可以随时找回活动。