向应用授予 RSC 权限

资源特定的同意 (RSC) 是一种Microsoft Teams 和 Microsoft Graph API 集成,使应用能够使用 API 终结点来管理组织内的特定资源、团队、聊天或用户。

在本部分中,你将了解如何:

  1. 向 Teams 应用添加 RSC 权限
  2. 在团队、聊天或用户中安装应用
  3. 验证授予应用的应用 RSC 权限

向 Teams 应用添加 RSC 权限

若要向应用添加 RSC 权限,请执行以下步骤:

  1. 使用 Microsoft Entra 管理中心将应用注册到 Microsoft 标识平台
  2. ) 更新应用清单 (以前称为 Teams 应用清单

使用 Microsoft Entra 管理中心将应用注册到 Microsoft 标识平台

Microsoft Entra 管理中心提供了一个用于注册和配置应用的中心平台。 必须在 Microsoft Entra 管理中心注册应用,才能与标识平台集成并调用 Graph API。 有关详细信息,请参阅 向标识平台注册应用

警告

不得在多个 Teams 应用之间共享Microsoft Entra 应用 ID。 Teams 应用与 Microsoft Entra 应用之间必须具有 1:1 映射。 安装与同一Microsoft Entra 应用 ID 关联的多个 Teams 应用将导致安装或运行时失败。

更新应用清单

必须在应用 manifest.json 文件中声明 RSC 权限。 无需将非 RSC 权限添加到应用清单,因为 entra 管理中心存储这些权限Microsoft。

请求 Teams 应用的 RSC 权限

若要请求应用的 RSC 权限,请在应用清单的授权部分中列出应用所需的权限。 这些说明可能因应用清单版本而异。

注意

对于委托的权限,请使用应用清单 v1.12 或更高版本。

每当授权用户在 Teams 中安装你的应用时,应用清单中请求的 RSC 权限会显示给该用户。 权限是在应用安装过程中授予的。


应用清单 v1.12 或更高版本的 RSC 权限

若要在应用清单中添加 RSC 权限,请执行以下操作:

  1. 使用以下值将 webApplicationInfo 密钥添加到应用清单:

    名称 类型 说明
    id String Microsoft Entra 应用 ID。 有关详细信息,请参阅 在 Microsoft Entra 管理中心注册应用
    resource String 此字段在 RSC 中没有操作,但必须添加一个值以避免错误响应。 可以将任何字符串添加为值。
  2. 添加应用所需的权限。

    名称 类型 说明
    authorization Object 应用运行所需的权限列表。 有关详细信息,请参阅 应用清单中的授权

    如果应用旨在支持在团队和聊天范围内安装,则可以在 下的 authorization同一应用清单中指定团队和聊天权限。

团队中的 RSC 权限示例:

"webApplicationInfo": {
    "id": "XXxxXXXXX-XxXX-xXXX-XXxx-XXXXXXXxxxXX",
    "resource": "https://RscBasedStoreApp"
    },
"authorization": {
    "permissions": {
        "resourceSpecific": [
            {
                "name": "TeamSettings.Read.Group",
                "type": "Application"
            },
            {
                "name": "TeamSettings.ReadWrite.Group",
                "type": "Application"
            },
            {
                "name": "ChannelSettings.Read.Group",
                "type": "Application"
            },
            {
                "name": "ChannelSettings.ReadWrite.Group",
                "type": "Application"
            },
            {
                "name": "Channel.Create.Group",
                "type": "Application"
            },
            {
                "name": "Channel.Delete.Group",
                "type": "Application"
            },
            {
                "name": "ChannelMessage.Read.Group",
                "type": "Application"
            },
            {
                "name": "TeamsAppInstallation.Read.Group",
                "type": "Application"
            },
            {
                "name": "TeamsTab.Read.Group",
                "type": "Application"
            },
            {
                "name": "TeamsTab.Create.Group",
                "type": "Application"
            },
            {
                "name": "TeamsTab.ReadWrite.Group",
                "type": "Application"
            },
            {
                "name": "TeamsTab.Delete.Group",
                "type": "Application"
            },
            {
                "name": "TeamMember.Read.Group",
                "type": "Application"
            },
            {
                "name": "TeamsActivity.Send.Group",
                "type": "Application"
            },
            {
              "name": "ChannelMeeting.ReadBasic.Group",
              "type": "Delegated"
            },
            {
              "name": "ChannelMeetingParticipant.Read.Group",
              "type": "Delegated"
            },
            {
              "name": "ChannelMeetingStage.Write.Group",
              "type": "Delegated"
            }
        ]
    }
}

聊天中的 RSC 权限示例:

"webApplicationInfo": {
    "id": "XXxxXXXXX-XxXX-xXXX-XXxx-XXXXXXXxxxXX",
    "resource": "https://RscBasedStoreApp"
    },
"authorization": {
    "permissions": {
        "resourceSpecific": [
            {
                "name": "ChatSettings.Read.Chat",
                "type": "Application"
            },
            {
                "name": "ChatSettings.ReadWrite.Chat",
                "type": "Application"
            },
            {
                "name": "ChatMessage.Read.Chat",
                "type": "Application"
            },
            {
                "name": "ChatMember.Read.Chat",
                "type": "Application"
            },
            {
                "name": "Chat.Manage.Chat",
                "type": "Application"
            },
            {
                "name": "TeamsTab.Read.Chat",
                "type": "Application"
            },
            {
                "name": "TeamsTab.Create.Chat",
                "type": "Application"
            },
            {
                "name": "TeamsTab.Delete.Chat",
                "type": "Application"
            },
            {
                "name": "TeamsTab.ReadWrite.Chat",
                "type": "Application"
            },
            {
                "name": "TeamsAppInstallation.Read.Chat",
                "type": "Application"
            },
            {
                "name": "OnlineMeeting.ReadBasic.Chat",
                "type": "Application"
            },
            {
                "name": "Calls.AccessMedia.Chat",
                "type": "Application"
            },
            {
                "name": "Calls.JoinGroupCalls.Chat",
                "type": "Application"
            },
            {
                "name": "TeamsActivity.Send.Chat",
                "type": "Application"
            },
            {
                "name": "MeetingStage.Write.Chat",
                "type": "Delegated"
            }
        ]
    }
}

用户 RSC 权限的示例:

"webApplicationInfo": {
    "id": "XXxxXXXXX-XxXX-xXXX-XXxx-XXXXXXXxxxXX",
    "resource": "https://RscBasedStoreApp"
    },
"authorization": {
    "permissions": {
        "orgWide": []
        "resourceSpecific": [
            {
                "name": "InAppPurchase.Allow.User",
                "type": "Delegated"
            },
            {
                "name": "TeamsActivity.Send.User",
                "type": "Application"
            },
        ]
    }
}


应用清单 v1.11 或更低版本的 RSC 权限

注意

建议使用应用清单 v1.12 或更高版本。

使用以下值将 webApplicationInfo 密钥添加到应用清单:

名称 类型 说明
id String Microsoft Entra 应用 ID。 有关详细信息,请参阅 在 Microsoft Entra 管理中心注册应用
resource String 此字段在 RSC 中没有操作,但必须添加一个值以避免错误响应。 可以将任何字符串添加为值。
applicationPermissions 字符串数组 应用的 RSC 权限。 有关详细信息,请参阅 支持的 RSC 权限

如果应用旨在支持在团队和聊天范围内安装,则可以在 下的 applicationPermissions同一应用清单中指定团队和聊天权限。

团队中的 RSC 权限示例:

"webApplicationInfo": {
    "id": "XXxxXXXXX-XxXX-xXXX-XXxx-XXXXXXXxxxXX",
    "resource": "https://RscBasedStoreApp",
    "applicationPermissions": [
        "TeamSettings.Read.Group",
        "TeamSettings.ReadWrite.Group",
        "ChannelSettings.Read.Group",
        "ChannelSettings.ReadWrite.Group",
        "Channel.Create.Group",
        "Channel.Delete.Group",
        "ChannelMessage.Read.Group",
        "TeamsAppInstallation.Read.Group",
        "TeamsTab.Read.Group",
        "TeamsTab.Create.Group",
        "TeamsTab.ReadWrite.Group",
        "TeamsTab.Delete.Group",
        "TeamMember.Read.Group",
        "TeamsActivity.Send.Group"
    ]
  }

聊天中的 RSC 权限示例:

"webApplicationInfo": {
    "id": "XXxxXXXXX-XxXX-xXXX-XXxx-XXXXXXXxxxXX",
    "resource": "https://RscBasedStoreApp",
    "applicationPermissions": [
        "ChatSettings.Read.Chat",
        "ChatSettings.ReadWrite.Chat",
        "ChatMessage.Read.Chat",
        "ChatMember.Read.Chat",
        "Chat.Manage.Chat",
        "TeamsTab.Read.Chat",
        "TeamsTab.Create.Chat",
        "TeamsTab.Delete.Chat",
        "TeamsTab.ReadWrite.Chat",
        "TeamsAppInstallation.Read.Chat",
        "OnlineMeeting.ReadBasic.Chat",
        "Calls.AccessMedia.Chat",
        "Calls.JoinGroupCalls.Chat",
        "TeamsActivity.Send.Chat"
    ]
  }

用户的 RSC 权限示例:

"webApplicationInfo": {
    "id": "XXxxXXXXX-XxXX-xXXX-XXxx-XXXXXXXxxxXX",
    "resource": "https://RscBasedStoreApp",
    "applicationPermissions": [
        "TeamsActivity.Send.User"
    ]
  }

在团队、聊天或用户中安装应用

若要安装已在团队、聊天或用户中启用 RSC 权限的应用,请执行以下步骤:

  1. 确保已为团队、聊天或用户配置 同意设置
  2. 在 Teams 中上传自定义应用

注意

若要查看团队或聊天的 RSC 设置,用户必须具有以下Microsoft 365 个角色之一:

  • 全局管理员
  • 全局读取者
  • Teams 管理员
  • 特权角色管理员

应用程序 RSC 权限的租户级控制因资源类型而异。

对于委派权限,任何授权用户可以同意应用请求的权限。

警告

正在更新管理团队和聊天 RSC 权限设置的方式。 政府云的预选期已开始并持续到 2024 年 5 月 14 日。 在此期间,政府云组织可以继续使用组所有者同意。 对于所有其他组织,以下是在 PowerShell 中修改同意设置的说明。

对于政府云中的组织,可以在 2024 年 5 月 14 日之前 使用Microsoft Entra 管理中心的组所有者同意设置来管理同意设置

租户级 RSC 设置由 PowerShell 和图形 API 管理。 有关使用 PowerShell 管理 Microsoft Graph 设置的详细信息,请参阅 Microsoft Graph PowerShell SDK 入门

可以使用 Connect-MgGraph cmdlet 并使用以下权限进行连接:

  1. TeamworkAppSettings.ReadWrite.All
  2. Policy.ReadWrite.Authorization
  3. Policy.ReadWrite.PermissionGrant
  4. AppCatalog.Read.All

下面是 PowerShell 设置的可用状态,每个部分都演示了如何使用这些状态来调整设置的示例:

PowerShell 状态 说明
ManagedByMicrosoft 这是所有租户的默认状态。 它允许所有用户同意聊天和团队 RSC 权限,但可以随时Microsoft自行决定进行更改。
EnabledForAllApps 任何请求 RSC 权限的应用都可以由租户中的用户 (资源所有者) 许可。
DisabledForAllApps 用户无法同意 RSC 权限。

通过 PowerShell cmdlet 配置团队 RSC

可以使用可用的 PowerShell 状态(例如 ManagedByMicrosoft、EnabledForAllApps 和 DisabledForAllApps)配置允许哪些用户同意应用访问其团队的数据。

以下示例演示如何为所有应用启用团队 RSC:

Set-MgBetaTeamRscConfiguration -State EnabledForAllApps

通过 PowerShell cmdlet 配置聊天 RSC

可以使用可用的 PowerShell 状态(例如 ManagedByMicrosoft、EnabledForAllApps 和 DisabledForAllApps)来配置允许哪些用户同意应用访问其聊天数据。

以下示例演示如何为所有应用启用聊天 RSC:

Set-MgBetaChatRscConfiguration -State EnabledForAllApps

使用 Graph API 为用户配置 RSC 的用户所有者同意设置

可以使用图形 API 为用户启用或禁用 RSC。 isUserPersonalScopeResourceSpecificConsentEnabled teamsAppSettings 中的 属性控制租户中是否启用了用户 RSC。

屏幕截图显示了 Graph RSC 用户配置。

属性的 isUserPersonalScopeResourceSpecificConsentEnabled 默认值基于首次使用用户 RSC 时,是打开还是关闭租户中的用户 同意设置 。 在以下情况下定义默认值:

注意

添加了管理员控制,以基于所访问数据的敏感性允许或阻止 RSC 同意设置。 它不基于为租户中所有应用启用或禁用应用 RSC 权限同意设置的单一主交换机。


在 Teams 中上传自定义应用

如果 Teams 管理员允许上传自定义应用,则可以 将自定义应用直接上传到 特定团队、聊天或用户。

验证授予应用的应用 RSC 权限

若要验证应用 RSC 权限,请执行以下步骤:

  1. 从Microsoft标识平台获取访问令牌
  2. 检查授予特定资源的 RSC 权限

从 Microsoft 标识平台获取访问令牌

若要进行 Graph API 调用,必须从标识平台获取应用的访问令牌。 在应用可以从标识平台获取令牌之前,必须在 Microsoft Entra 管理中心注册应用。 访问令牌包含有关你的应用及其对通过 Microsoft Graph 提供的资源和 API 的权限的信息。

必须具有 Microsoft Entra 注册过程中的以下值才能从标识平台检索访问令牌:

  • 应用程序 ID:Microsoft Entra 管理中心分配给应用的应用 ID。 如果应用支持单一登录 (SSO) ,则必须对应用和 SSO 使用相同的应用 ID。
  • 客户端密码证书:应用的密码,或作为证书的公钥或私钥对。 本机应用不需要客户端密码或证书。
  • 重定向 URI:应用用于从 entra ID Microsoft 接收响应的 URL。

有关详细信息,请参阅代表用户获取访问权限在没有用户的情况下获取访问权限

检查授予特定资源的 RSC 权限

可以检查授予应用中资源的 RSC 权限类型:

  • 对于应用程序 RSC 权限,请调用以下 API 以检索在团队、聊天或用户中安装的应用列表:

    这些是在此特定资源上授予的所有应用程序 RSC 权限。 通过将权限授予webApplicationInfo.Id列表中的 与应用清单中的 属性匹配clientAppId,列表中的每个条目都可以与 Teams 应用相关联。

  • 委派的 RSC 权限是 Teams 仅限客户端的权限。 无法检索在团队或聊天中安装的应用列表,因为当用户与应用交互时会授予这些权限。

重要

RSC 权限不归于用户。 调用是使用应用程序权限进行的,而不是用户委托的权限。 可以允许应用执行用户无法执行的操作,例如删除选项卡。在进行 RSC API 调用之前,必须查看团队所有者或聊天所有者的意向以供使用。 有关详细信息,请参阅 Microsoft Teams API 概述

将应用安装到资源后,可以使用 Microsoft Graph 资源管理器 查看已授予资源中的应用的权限。

在团队中检查是否为应用添加了 RSC 权限

  1. 从 Teams 获取团队的 groupId

  2. 在“Teams”中,从左窗格中选择“ Teams ”。

  3. 选择要安装应用的团队。

  4. 为该团队选择省略号 ●●● 。

  5. 从下拉列表中选择“ 获取团队链接 ”。

  6. 从“获取指向团队的链接”弹出对话框中复制并保存 groupId 值。

  7. 登录到 Graph 浏览器

  8. 对以下终结点进行 GET 调用:https://graph.microsoft.com/beta/teams/{teamGroupId}/permissionGrants

    clientAppId响应中的字段必须映射到webApplicationInfo.id应用清单中指定的 。

    屏幕截图显示了 Graph 资源管理器对团队 RSC 权限的 GET 调用的响应。

若要详细了解如何获取特定团队中安装的应用的详细信息,请参阅获取指定团队中安装的应用的名称和其他详细信息

在聊天中检查是否为应用添加了 RSC 权限

  1. 从 Teams Web 客户端获取聊天线程 ID。

  2. 在 Teams Web 客户端中,从左窗格中选择“ 聊天 ”。

  3. 从下拉列表中选择已安装应用的聊天。

  4. 从字符串中复制 Web URL 并保存聊天线程 ID。

    屏幕截图显示了 Web URL 中的聊天线程 ID。

  5. 登录到 Graph 浏览器

  6. 对以下终结点进行 GET 调用:https://graph.microsoft.com/beta/chats/{chatId}/permissionGrants

    clientAppId响应中的字段必须映射到webApplicationInfo.id应用清单中指定的 。

    屏幕截图显示图形资源管理器响应聊天 RSC 权限的 GET 调用。

若要详细了解如何获取特定聊天中安装的应用的详细信息,请参阅获取指定聊天中安装的应用的名称和其他详细信息

检查应用是否为用户添加了 RSC 权限

  1. 使用 获取用户 API。 在请求 URL 中,传递用户的 UPN,并从响应正文使用 id 字段作为用户的 ID。

  2. 登录到 Graph 浏览器

  3. 对以下终结点进行 GET 调用:https://graph.microsoft.com/beta/users/{user-id}/permissionGrants

    或者,可以传递用户的 UPN 而不是 user-id

    clientAppId响应中的字段必须映射到 webApplicationInfo.id Teams 应用清单中指定的 。

    屏幕截图显示了 Graph 资源管理器响应用户 RSC 权限的 GET 调用。

有关如何获取为用户安装的应用的详细信息,请参阅 获取为用户安装的应用的名称和其他详细信息

代码示例

示例名称 说明 .NET Node.js 应用部件清单
资源特定许可 (RSC) 此示例代码介绍了使用 RSC 调用 Graph API 的过程。 View View View
配置 RSC 权限 此示例代码演示如何在应用清单中配置 RSC 权限,利用这些权限调用 Microsoft Graph,并观察已安装范围的实际响应。 不适用 View NA

另请参阅