首页 > 解决方案 > 具有 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#notificationsmicrosoft-graph-apipostmanmicrosoft-teams

解决方案


抱歉,但我必须将此作为答案发布,因为我没有足够的代表发表评论。与其说是答案,不如说是指南。

先决条件:您的 C# 应用已在 Azure 中注册,具有 TeamsActivity.Send 的 Graph API 权限

通过执行以下操作,我能够使其工作:

  1. 使用团队“开发者门户”应用程序,我转到“应用程序”选项卡并添加了一个新应用程序。在“应用程序功能”下,我添加了一个活动提要通知,然后我作为应用程序包发布(稍后作为组织应用程序上传,您将在下一步中了解原因)。

  2. 由于某种原因,我在上一步中输入的应用程序(客户端)ID 没有放入我的清单文件中(可能是因为我没有添加 SSO 提供程序?我不确定)。因此,我修改了团队应用程序清单以包含我的 C# 应用程序的客户端 ID,并添加以下内容:

    "webApplicationInfo": { "id": "{my C# app's client id}", "applicationPermissions": [ "TeamsActivity.Send" ] }

  3. 我再次压缩文件并将包上传到Teams 管理中心

  4. 然后我就可以安装我上传到我的团队应用程序的自定义应用程序。

  5. 安装应用程序后,我尝试测试我的 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,它就无法进行身份验证,这似乎是我的问题。还要确保您的收件人安装了该应用程序,因为这也可能导致此异常。


推荐阅读