c# - 具有 AAD 应用程序 ID 的应用程序无权向收件人生成有关 [...] 的通知
问题描述
早上好,我正在尝试使用 Microsoft graph 的 API 在 Microsoft Teams 源中发送通知。
我创建了一个 C# APP,并按照官方指南进行了所有授权: 这里
但我无法完成这些事情。因此,我选择仅使用 Postman 删除整个 C# 应用程序,从而使事情变得更容易一些。结果是我得到了同样的错误......
(与邮递员一起尝试 1) -> 这是我的请求的正文:
{
"topic": {
"source": "entityUrl",
"value": "https://graph.microsoft.com/beta/users/{MY_USER_ID}/teamwork/installedApps/{APP_ID}"
},
"activityType": "taskCreated",
"previewText": {
"content": "New Task Created"
},
"templateParameters": [
{
"name": "taskId",
"value": "Task 12322"
}
]
}
这是我的电话:
https://graph.microsoft.com:443/beta/users/{MY_USER_ID}/teamwork/microsoft.graph.sendActivityNotification
结果我得到了这个:
{
"error": {
"code": "Forbidden",
"message": "Application with AAD App Id '{APP_ID}' is not authorized to generate notifications about 'https://graph.microsoft.com/beta/users/{MY_USER_ID}/teamwork/installedApps/{APP_ID}' to the recipient.",
"innerError": {
"date": "{date}",
"request-id": "{request-id}",
"client-request-id": "{client-request-id}"
}
}
}
(与邮递员一起尝试 2) -> 这是我的请求的主体(与第一个相同):
{
"topic": {
"source": "entityUrl",
"value": "https://graph.microsoft.com/beta/users/{MY_USER_ID}/teamwork/installedApps/{APP_ID}"
},
"activityType": "taskCreated",
"previewText": {
"content": "New Task Created"
},
"templateParameters": [
{
"name": "taskId",
"value": "Task 12322"
}
]
}
这是我的电话(改变的事情):
https://graph.microsoft.com/beta/users/{MY_USER_ID}/teamwork/installedApps/{APP_ID}
这是错误:
{
"error": {
"code": "UnknownError",
"message": "",
"innerError": {
"date": "{date}",
"request-id": "{request-id}",
"client-request-id": "{client-request-id}"
}
}
}
我认为正确的呼叫是第一个,但我不确定......我已经获得了上面链接的指南所需的权限(TeamsActivity.Send 'delegated' 和 TeamsActivity.Send 'application') .
我确定我遗漏了一些东西,但是从GraphExplorer我什至无法测试正确的调用/了解我遗漏了哪个权限
在此先感谢,乔瓦尼
---------编辑1---------
按照 Carl Zhao 在这里我的访问令牌的要求,我不得不审查一些数据,但我认为它会以同样的方式读取:
{
"typ": "JWT",
"nonce": "FHxXnlAuHU14c4czPflNLrniH-4d-4ZdRNawgEx6LQg",
"alg": "RS256",
"x5t": "nOo3ZDrODXEK1jKWhXslHR_KXEg",
"kid": "nOo3ZDrODXEK1jKWhXslHR_KXEg"
}.{
"aud": "00000003-0000-0000-c000-000000000000",
"iss": "https://sts.windows.net/9e892716-96e0-4bf4-a58a-e43212bfab33/",
"iat": 1614156685,
"nbf": 1614156685,
"exp": 1614160585,
"acct": 0,
"acr": "1",
"acrs": [
"urn:user:registersecurityinfo",
"urn:microsoft:req1",
"urn:microsoft:req2",
"urn:microsoft:req3",
"c1",
"c2",
"c3",
"c4",
"c5",
"c6",
"c7",
"c8",
"c9",
"c10",
"c11",
"c12",
"c13",
"c14",
"c15",
"c16",
"c17",
"c18",
"c19",
"c20",
"c21",
"c22",
"c23",
"c24",
"c25"
],
"aio": "E2ZgYBBXWFm5tc8nMm5J68RHD6qmJ31f8GpGeqzcg8/+XlvTE40B",
"amr": [
"pwd"
],
"app_displayname": "NotificationSender",
"appid": "{APP_ID}",
"appidacr": "0",
"family_name": "{My_surname}",
"given_name": "{My_name}",
"idtyp": "user",
"ipaddr": "{IP}",
"name": "{My_surname} {My_name}",
"oid": "{MY_USER_ID}",
"platf": "14",
"puid": "10032001002D8362",
"rh": "0.AREAFieJnuCW9EuliuQyEr-rM44Tv1nRFotKsOAymqy2XUwRALk.",
"scp": "email IdentityProvider.Read.All IdentityProvider.ReadWrite.All IdentityRiskEvent.Read.All IdentityRiskEvent.ReadWrite.All IdentityRiskyUser.Read.All IdentityRiskyUser.ReadWrite.All IdentityUserFlow.Read.All IdentityUserFlow.ReadWrite.All Notifications.ReadWrite.CreatedByApp openid profile TeamsActivity.Read TeamsActivity.Send TeamsApp.ReadWrite User.Read User.ReadBasic.All UserNotification.ReadWrite.CreatedByApp",
"sub": "EmlIIgfTtCx92uXpG26JS3A4s30BF-L_q08y7WpK45g",
"tenant_region_scope": "EU",
"tid": "9e892716-96e0-4bf4-a58a-e43212bfab33",
"unique_name": "{My_Mail}",
"upn": "{My_Mail}",
"uti": "hfEx4TU7lEOdFnLyO38VAA",
"ver": "1.0",
"wids": [
"7be44c8a-adaf-4e2a-84d6-ab2649e08a13",
"158c047a-c907-4556-b7ef-446551a6b5f7",
"baf37b3a-610e-45da-9e62-d9d1e5e8914b",
"c4e39bd9-1100-46d3-8c65-fb160da0071f",
"9b895d92-2cd3-44c7-9d02-a6ac2d5ea5c3",
"b79fbf4d-3ef9-4689-8143-76b194e85509"
],
"xms_st": {
"sub": "xFCFf1A82XccwsRgTd7olVqOBVUE9pZ5d6QDyWjbojc"
},
"xms_tcdt": 1428499913
}.[Signature]
解决方案
抱歉,但我必须将此作为答案发布,因为我没有足够的代表发表评论。与其说是答案,不如说是指南。
先决条件:您的 C# 应用已在 Azure 中注册,具有 TeamsActivity.Send 的 Graph API 权限
通过执行以下操作,我能够使其工作:
使用团队“开发者门户”应用程序,我转到“应用程序”选项卡并添加了一个新应用程序。在“应用程序功能”下,我添加了一个活动提要通知,然后我作为应用程序包发布(稍后作为组织应用程序上传,您将在下一步中了解原因)。
由于某种原因,我在上一步中输入的应用程序(客户端)ID 没有放入我的清单文件中(可能是因为我没有添加 SSO 提供程序?我不确定)。因此,我修改了团队应用程序清单以包含我的 C# 应用程序的客户端 ID,并添加以下内容:
"webApplicationInfo": { "id": "{my C# app's client id}", "applicationPermissions": [ "TeamsActivity.Send" ] }
我再次压缩文件并将包上传到Teams 管理中心。
然后我就可以安装我上传到我的团队应用程序的自定义应用程序。
安装应用程序后,我尝试测试我的 C# 应用程序,但 id 和 externalid 值都不适用于我的“APP_ID”,得到与您提到的相同的异常。所以我打开了Graph Explorer,并使用以下查询找到了 id:https ://graph.microsoft.com/beta/me/teamwork/installedApps?$expand=teamsApp (这将是一个长字符串,而不是 GUID)。
一旦我使用了该 ID,一切正常。
据我了解,Teams 应用程序和您的 C# 应用程序本质上是 2 个不同的注册应用程序,它们使用 C# 应用程序的客户端 ID 绑定在一起,我认为这仅用于身份验证目的。我想如果您在 Teams 应用程序的清单中没有您的 C# 应用程序的客户端 ID,它就无法进行身份验证,这似乎是我的问题。还要确保您的收件人安装了该应用程序,因为这也可能导致此异常。
推荐阅读
- mysql - 插入上的 MySQL Percona 集群 WSREP
- python - pod内通过python访问k8s API
- java - 为什么c =!如果 c 为布尔假,c 为真?
- c - 如何关闭最新的 Chrome 标签页?
- angular - 自定义库中从 8.1.13 到 9.1 的 Angular 迁移
- python - PyQt5 gif 不显示
- python - 进行过滤器查询时出现 Jsonpath 错误 - “在 %s 处解析错误:%s 靠近令牌 %s (%s)”
- python - 如何使用 Agora SDK 同时录制多个音频通道
- asp.net - 在我自己的机器上使用我的自定义域名托管 asp.net 应用程序
- sass - 无法使用 Eleventy 和 Sass @apply Tailwind 状态变体类