You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Azure AD或Office365门户配置MS Graph的OAuth 2.0 2-legged认证?

关于MS Graph实现2-legged OAuth认证的方案

首先明确:微软生态里对应的「2-legged OAuth」场景,就是客户端凭证流(Client Credentials Flow)——不需要终端用户交互,直接以应用自身的身份调用MS Graph API,完全符合你想要的跳过用户授权、通过门户配置的需求。下面给你详细拆解配置步骤和相关注意点:

核心配置流程

你可以直接在Azure AD门户完成所有配置,步骤如下:

  • 注册应用:在Azure AD的「应用注册」页面创建一个新的应用程序,记录下客户端ID(Client ID)和租户ID(Tenant ID)。
  • 添加应用权限:进入应用的「API权限」页面,点击「添加权限」→ 选择「Microsoft Graph」→ 选择「应用权限」(注意:不是「委派权限」,委派权限是3-legged认证用的)。根据你的需求添加对应权限,比如User.Read.All(读取所有用户信息)、Mail.Read(读取所有邮箱)等,这类带All后缀的通常是应用级权限。
  • 授予管理员同意:添加权限后,必须点击「授予管理员同意」按钮(需要全局管理员或对应权限的管理员账号操作),这是应用权限生效的必要步骤。
  • 获取访问令牌:使用客户端ID + 客户端密钥(或证书,更安全)调用Azure AD的令牌端点:
    POST https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=client_credentials
    client_id={你的客户端ID}
    client_secret={你的客户端密钥}
    scope=https://graph.microsoft.com/.default
    
    拿到令牌后,就可以直接调用MS Graph API了。

针对域/用户组的权限限制

如果想让应用只能访问特定Office 365域或用户组的资源,微软没有像G Suite那样直接的「委派权限到组」的可视化配置,但可以通过以下方式实现类似效果:

  • API调用时过滤:在调用MS Graph API时,通过$filter参数筛选目标组/域的资源,比如读取特定组的用户:
    GET https://graph.microsoft.com/v1.0/users?$filter=memberOf/any(g:g/id eq '{目标组ID}')
    
  • 条件访问策略:在Azure AD的「条件访问」页面创建策略,限制该应用只能被特定用户组访问,间接实现资源范围的控制。
  • 应用角色分配:如果你的应用需要针对特定组提供不同的API权限,可以在应用注册里定义应用角色,然后将角色分配给用户组,后续在代码里根据角色判断访问范围。

和G Suite 2-legged OAuth的区别

G Suite的服务账号委派是允许服务账号模拟特定用户进行操作,而MS Graph的客户端凭证流是以应用自身身份操作,二者的核心差异在于身份主体:

  • 如果你的场景需要模拟用户(比如以某用户的身份发送邮件),而又不想用户授权,微软这边不推荐使用资源所有者密码凭证流(不安全),更合适的方案是使用应用权限 + 模拟用户的API操作(比如调用sendMail时指定from参数),或者结合Azure AD的特权身份管理来实现特定场景的模拟。

内容的提问来源于stack exchange,提问作者Developer Team The Cloud Gate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:18:55