【问题标题】:Microsoft Graph API - Client Credentials Grant FlowMicrosoft Graph API - 客户端凭据授予流程
【发布时间】:2026-01-18 22:40:01
【问题描述】:

我正在使用客户端凭据授予流程实现 Microsoft Graph API,如 https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service 中所述。此外,该应用已在https://apps.dev.microsoft.com/注册。

这里的目的是允许我们的 Web 应用程序执行检查用户的日历和代表他们发送邮件等操作,而无需每个用户进行身份验证并授予对应用程序的访问权限。我们的想法是让它对他们透明。

所以我认为我已经让它工作了,但想澄清一些事情。

  • 一旦获得管理员同意,如果应用程序的权限没有改变,是否需要再次执行?
  • 请求访问令牌时,它看起来在一小时后过期。有没有办法让它更长?否则,确保令牌未过期的典型工作流程是什么?每次应用程序发出 API 请求以确保令牌有效时,我是否应该请求令牌?或者也许存储令牌,但在它过期之前获得一个新的?

【问题讨论】:

    标签: azure-active-directory microsoft-graph-api


    【解决方案1】:

    Admin Consent 仅提供对在授予同意时注册的权限的同意。所以是的,如果您更改权限,需要在您的应用程序接收新范围之前重复管理员同意。

    根据设计,访问令牌只能存在很短的时间。您不应该在每个请求中都请求一个新令牌,因为这会增加不必要的开销。相反,您应该仅在其过期后才请求新令牌。

    来自 AAD 的包含您的令牌的响应也将提供过期时间:

    {
      "access_token": "eyJ0eXAiOiJKV1QiLCJ...",
      "expires_in": 3599,
      "token_type": "Bearer",
      "scope": "https://graph.microsoft.com/mail.read https://graph.microsoft.com/user.read",
    }
    

    您可以将令牌响应与对象的创建时间一起合并到一个对象中。在调用 Graph 之前,您检查过期时间以确定您的应用是否需要提前刷新令牌。

    【讨论】:

    • 是的,这是有道理的。谢谢!