Skip to main content

应用访问

应用以应用的身份访问资源。

当一个应用想直接通过 OpenAPI 访问资源时,应用的访问不受到某个登录用户“能否操作”或者“文件是否属于用户”的限制。应用用自己的应用的身份调用 OpenAPI ,且只有管理员可以授权,这种场景被称为应用访问。

应用访问用访问凭证实现应用访问
应用访问简图应用访问凭证访问

什么时候需要使用应用访问?

通常,应用访问比委托访问有更大的影响范围和威力,所以你最好在必须使用应用访问的时候使用它。下面是使用应用访问的常见场景:

  1. 应用需要自动运行,没有与用户的交互。例如,一个脚本,检查来自特定联系人的邮件并自动回复。
  2. 应用需要访问的资源属于多个用户。例如,一个备份应用,需要从不同的渠道获取数据,这些数据来自不同的用户。

作为一个应用向管理员申请权限

鉴于应用权限较大的影响面,应用权限项必须由使用应用的组织的管理员完成授权。

  • 首先,开发者需要在开发者后台为应用勾选所需的应用权限项。
  • 其次,你的应用需要被使用者组织的管理员授权。管理员可以给你的应用授权的场景有以下三种:
    1. 管理员通过应用市场开通你的应用时完成授权,详见应用开通时授权
    2. 管理员在工作台中主动手动为你的应用授权,详见工作台权限管理
    3. 你的应用编码为在应用内为管理员展示授权窗口,动态请求管理员授权,详见钉钉端内获取应用的访问凭证
  • 同样的,请遵循最小权限原则:永远不要向用户请求你的应用用不到的权限项。例如,如果你的应用想要列出用户的聊天列表而不是每一条聊天消息,你需要请求获取 Chat.ReadBasic 而不是 Chat.Read
    * 这可以帮助你的应用在被攻陷时降低安全风险,也可以帮助你的应用更容易地通过管理员的授权同意。
    * 如果用户怀疑你的应用存在超量获取权限的行为,平台会将收到的用户反馈同步给你的应用。
    Note

    如果你的应用是让用户登录并管理自己资源的,绝对不能使用应用访问。“用户可以登录并管理自己资源”的这一类场景下,只有使用委托访问,才能满足最小权限原则

应用访问示例——通过 OpenAPI 自动发送邮件

例如:小明希望每次有人生日的时候通过邮件通知团队里的所有人。 于是他写了一个脚本,设置了每个人的生日,并且在有人生日的那天自动调用发邮件的 OpenAPI 。 脚本在没有任何人交互的情况下运行,因此授权服务器只会校验应用的权限。

  • 授权服务器会校验应用是否被管理员授予了权限项 Mail.Send 。如果 Mail.Send 没有被授予给应用,授权服务器会拒绝应用的调用请求。
POST/users/{id}/{unionId}/sendMail应用被授予了 Mail.Send应用没有被授予 Mail.Send
脚本使用小明的邮箱发邮件200 - 允许访问。管理员允许应用以任何人的身份发送邮件。403 - 无权限。管理员不允许这个应用发邮件。
脚本创建了一个专门的邮箱发邮件200 - 允许访问。管理员允许应用以任何人的身份发送邮件。403 - 无权限。管理员不允许这个应用发邮件。