Microsoft 标识平台中的权限和同意概述
若要访问受保护资源(例如电子邮件或日历数据),应用程序需要获取资源所有者的授权。 资源所有者可以同意或拒绝应用的请求。 了解这些基本概念将有助于构建更安全且可信的应用程序,它们只会在有需要时才向其用户和管理员请求所需的访问权限。
访问方案
应用程序开发人员必须确定应用程序如何访问数据。 应用程序可以使用代表已登录用户执行操作的委托访问权限,也可以使用仅以应用程序自己的身份执行操作的“仅应用”访问权限。
委托访问权限(代表用户访问)
在此访问方案中,用户已登录到客户端应用程序。 客户端应用程序代表用户访问资源。 委托访问权限需要委托的权限。 客户端和用户都必须单独获得发出请求的授权。 有关委托访问方案的详细信息,请参阅委托访问方案。
对于客户端应用,必须授予正确的委托权限。 委托的权限也可以称作范围。 范围是给定资源的权限,表示客户端应用程序可以代表用户访问的内容。 有关范围的详细信息,请参阅范围和权限。
对于用户,授权依赖于向用户授予的资源访问特权。 例如,可以授权用户通过 Microsoft Entra 基于角色的访问控制 (RBAC) 访问目录资源,或通过 Exchange Online RBAC 访问邮件和日历资源。 有关应用程序的 RBAC 的详细信息,请参阅应用程序的 RBAC。
“仅应用”访问(没有用户参与的访问)
在此访问方案中,应用程序以自己的身份执行操作,且没有任何用户登录。 在自动化和备份等方案中会使用应用程序访问权限。 此方案包括作为后台服务或守护程序运行的应用。 如果不希望特定的用户登录,或者所需数据的访问权限范围不能限定为单个用户,则很适合使用此方案。 如需详细了解仅限应用的访问方案,请参阅仅限应用访问。
“仅应用”访问使用应用角色,而不使用委托范围。 通过同意进行授予时,应用角色也可以称为应用程序权限。 必须向客户端应用授予其所调用的资源应用的适当应用程序权限。 一旦获得授权,客户端应用就可以访问所请求的数据。 若要详细了解如何将应用角色分配给客户端应用程序,请参阅向应用程序分配应用角色。
权限的类型
委托权限在委托访问方案中使用。 这些权限允许应用程序代表用户执行操作。 应用程序永远无法访问已登录用户自己都无法访问的任何内容。
例如,假设已代表用户授予某应用程序 Files.Read.All
委托权限。 该应用程序只能读取用户个人可以访问的文件。
应用程序权限(也称为应用角色)在没有已登录用户存在的“仅应用”访问方案中使用。 应用程序能够访问与该权限关联的任何数据。
例如,被授予 Microsoft Graph API 应用程序权限 Files.Read.All
的应用程序将能够使用 Microsoft Graph 读取租户中的任何文件。 通常,只有 API 服务主体的管理员或所有者才能同意该 API 公开的应用程序权限。
委托权限和应用程序权限的比较
权限类型 | 委托权限 | 应用程序权限 |
---|---|---|
应用类型 | Web/移动/单页应用 (SPA) | Web/守护程序 |
访问上下文 | 以用户身份获取访问权限 | 在不是用户的情况下获取访问权限 |
谁可以许可 | - 用户可以同意使用其数据 - 管理员可以同意所有用户 |
只有管理员可以同意 |
同意方法 | - 静态:在应用注册时配置的列表 - 动态:登录时请求个人权限 |
- 仅静态:应用注册时配置的列表 |
其他名称 | - 范围 - OAuth2 权限范围 |
- 应用角色 -“仅应用”权限 |
同意结果(特定于 Microsoft Graph) | OAuth2PermissionGrant | appRoleAssignment |
同意
为应用程序授予权限的一种方式是通过同意。 同意是用户或管理员授权应用程序访问受保护资源的过程。 例如,当用户首次尝试登录到某个应用程序时,该应用程序可以请求查看用户个人资料和读取用户邮箱内容的权限。 用户可以通过同意提示来查看应用正在请求的权限列表。 用户可能会看到同意提示的其他场景包括:
- 撤销以前授予的同意。
- 应用程序被编码为在用户登录期间专门提示用户同意。
- 当应用程序使用动态许可在运行时根据需要请求新权限时。
同意提示的重要详细信息是应用程序所需的权限列表和发布者信息。 有关面向管理员和最终用户的同意提示与同意体验的详细信息,请参阅应用程序同意体验。
用户同意
当用户尝试登录到应用程序时,会发生用户同意流程。 用户提供登录凭据,系统会检查这些凭据以确定是否已授予同意。 如果不存在用户或管理员同意所需权限的以往记录,则系统会向用户显示同意提示,并询问用户是否为应用程序授予请求的权限。 可能需要管理员代表用户授予同意。
管理员同意
根据所需的权限,某些应用程序可能需要管理员来授予同意。 例如,应用程序权限和许多高特权委托权限只能由管理员同意。
管理员可为自己或整个组织授予同意。 有关用户和管理员同意的详细信息,请参阅用户和管理员同意概述。
如果未授予许可,并且请求了其中一个高特权权限,则会提示管理员同意身份验证请求。
包含自定义应用程序范围的权限请求不被视为高权限,因此不需要管理员同意。
预身份验证
预授权允许资源应用程序所有者授予权限,而无需用户查看已预授权的同一组权限的同意提示。 这样,已预授权的应用程序将不会询问用户是否同意权限。 资源所有者可以在 Azure 门户中或使用 PowerShell 和 API(例如 Microsoft Graph)来预授权客户端应用。
其他授权系统
许可框架只是应用程序或用户有权访问受保护资源的一种方式。 管理员应了解可能授予敏感信息访问权限的其他授权系统。 Microsoft 上各种授权系统的示例包括 Entra 内置角色、Azure RBAC、Exchange RBAC,以及 Teams 资源特定的同意。