应用访问
应用以应用的身份访问资源。
当一个应用想直接通过 OpenAPI 访问资源时,应用的访问不受到某个登录用户“能否操作”或者“文件是否属于用户”的限制。应用用自己的应用的身份调用 OpenAPI ,且只有管理员可以授权,这种场景被称为应用访问。
应用访问 | 用访问凭证实现应用访问 |
---|---|
什么时候需要使用应用访问?
通常,应用访问比委托访问有更大的影响范围和威力,所以你最好在必须使用应用访问的时候使用它。下面是使用应用访问的常见场景:
- 应用需要自动运行,没有与用户的交互。例如,一个脚本,检查来自特定联系人的邮件并自动回复。
- 应用需要访问的资源属于多个用户。例如,一个备份应用,需要从不同的渠道获取数据,这些数据来自不同的用户。
作为一个应用向管理员申请权限
鉴于应用权限较大的影响面,应用权限项必须由使用应用的组织的管理员完成授权。
- 首先,开发者需要在开发者后台为应用勾选所需的应用权限项。
- 其次,你的应用需要被使用者组织的管理员授权。管理员可以给你的应用授权的场景有以下三种:
- 管理员通过应用市场开通你的应用时完成授权,详见应用开通时授权。
- 管理员在工作台中主动手动为你的应用授权,详见工作台权限管理。
- 你的应用编码为在应用内为管理员展示授权窗口,动态请求管理员授权,详见钉钉端内获取应用的访问凭证。
- 同样的,请遵循最小权限原则:永远不要向用户请求你的应用用不到的权限项。例如,如果你的应用想要列出用户的聊天列表而不是每一条聊天消息,你需要请求获取
Chat.ReadBasic
而不是Chat.Read
。* 这可以帮助你的应用在被攻陷时降低安全风险,也可以帮助你的应用更容易地通过管理员的授权同意。
* 如果用户怀疑你的应用存在超量获取权限的行为,平台会将收到的用户反馈同步给你的应用。Note如果你的应用是让用户登录并管理自己资源的,绝对不能使用应用访问。“用户可以登录并管理自己资源”的这一类场景下,只有使用委托访问,才能满足最小权限原则。
应用访问示例——通过 OpenAPI 自动发送邮件
例如:小明希望每次有人生日的时候通过邮件通知团队里的所有人。 于是他写了一个脚本,设置了每个人的生日,并且在有人生日的那天自动调用发邮件的 OpenAPI 。 脚本在没有任何人交互的情况下运行,因此授权服务器只会校验应用的权限。
- 授权服务器会校验应用是否被管理员授予了权限项
Mail.Send
。如果Mail.Send
没有被授予给应用,授权服务器会拒绝应用的调用请求。
POST/users/{id}/{unionId}/sendMail | 应用被授予了 Mail.Send | 应用没有被授予 Mail.Send |
---|---|---|
脚本使用小明的邮箱发邮件 | 200 - 允许访问。管理员允许应用以任何人的身份发送邮件。 | 403 - 无权限。管理员不允许这个应用发邮件。 |
脚本创建了一个专门的邮箱发邮件 | 200 - 允许访问。管理员允许应用以任何人的身份发送邮件。 | 403 - 无权限。管理员不允许这个应用发邮件。 |