问题描述
早上好, 我正在尝试使用Microsoft图形的API在Microsoft Teams源中发送通知。
我已经创建了一个C#应用程序,并按照官方指南给出了所有授权: Here
但是我不能把事情做完。所以我选择了让事情变得简单一点,只使用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赵在我的访问令牌中的要求,我不得不审查一些数据,但我认为它将以同样的方式读取:
{
"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中注册,具有TeamsActivite.Send的图形API权限
我通过执行以下操作使其正常工作:
使用团队"Developer Portal"应用程序,我转到";apps";选项卡并添加了一个新应用程序。在应用程序功能下,我添加了活动摘要通知,然后作为应用程序包发布(稍后要作为组织应用程序上载,您将在下一步中了解原因)。
由于某种原因,我在上一步中输入的应用程序(客户端)ID没有放入我的清单文件中(可能是因为我没有添加SSO提供程序?我不确定)。因此,我修改了团队应用程序清单以包括我的C#应用程序的客户端ID,添加了以下内容:
webApplicationInfo;:{ ";id";:";{My C#应用程序的客户端ID}";, 应用程序权限(&Q;):[ 团队活动。发送(&Q); ] )我再次压缩文件并将包上载到Teams admin center。
然后,我能够安装我已上载到我的团队应用程序的自定义应用程序。
安装该应用程序后,我尝试测试我的C#应用程序,但id和outalid值都不适用于我的";app_ID";,得到与您提到的相同的异常。因此,我打开Graph Explorer,并使用以下查询找到id:https://graph.microsoft.com/beta/me/teamwork/installedApps?$expand=teamsApp(它将是一个长字符串,而不是GUID)。
一旦我使用该ID,一切都会正常工作。
根据我的理解,团队应用程序和您的C#应用程序本质上是两个不同的注册应用程序,它们使用您的C#应用程序的客户端ID绑定在一起,我认为这只是出于身份验证的目的。我猜如果团队应用程序的清单中没有C#应用程序的客户端ID,它就无法进行身份验证,这似乎是我的问题。另外,请确保您的收件人安装了应用程序,因为这也可能导致此异常。
这篇关于具有AAD应用程序ID的应用程序无权生成有关[.]的通知致收件人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!