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

如何让Connect-MgGraph与Connect-ExchangeOnline共用同一组凭据

如何让Connect-MgGraph与Connect-ExchangeOnline共用同一组凭据

嘿,这个问题我刚好研究过,给你几个可行的方案,帮你实现只输一次凭据就能同时搞定Microsoft Graph和Exchange Online的操作:

方案一:复用Connect-MgGraph的访问令牌(依赖Exchange Online预览版模块)

从Exchange Online PowerShell模块3.1.0-Preview1开始,Connect-ExchangeOnline新增了-AccessToken参数,刚好可以解决你的问题,步骤如下:

  1. 升级到预览版模块
    先确保你安装了支持-AccessToken的版本:

    Install-Module -Name ExchangeOnlineManagement -RequiredVersion 3.1.0-Preview1 -AllowPrerelease -Force
    
  2. 带Exchange相关权限登录Microsoft Graph
    登录时要指定包含Exchange Online权限的scope,这样获取的令牌才能被Exchange Online认可。比如你需要管理Exchange权限的话,可以加https://outlook.office365.com/Exchange.Manage(委托权限)或者https://outlook.office365.com/.default(应用权限,如果你用的是服务主体登录):

    # 这里会弹出一次登录框,输入凭据后即可
    Connect-MgGraph -Scopes "User.Read", "Application.ReadWrite.All", "https://outlook.office365.com/Exchange.Manage"
    
  3. 提取Graph会话的访问令牌
    从当前Graph上下文里取出令牌:

    $exchangeToken = (Get-MgContext).AccessToken
    
  4. 用令牌连接Exchange Online
    直接用刚才的令牌登录,不会再弹出凭据框:

    Connect-ExchangeOnline -AccessToken $exchangeToken -Organization "your-tenant-domain.onmicrosoft.com"
    

    (-Organization参数如果留空,令牌里的租户信息会自动生效,也可以不用加)

方案二:全程用Microsoft Graph API替代Exchange Online命令

如果不想依赖预览版模块,更彻底的办法是把Exchange相关的操作都改用Graph API来完成,这样全程只需要Connect-MgGraph一次登录:

比如你要给服务主体分配Exchange的应用权限,可以用New-MgServicePrincipalAppRoleAssignment命令:

  1. 先找到Exchange Online的服务主体ID
    Exchange Online的内置服务主体AppId是固定的00000002-0000-0ff1-ce00-000000000000,先获取它的对象ID:

    $exchangeServicePrincipal = Get-MgServicePrincipal -Filter "AppId eq '00000002-0000-0ff1-ce00-000000000000'"
    
  2. 找到你要分配的Exchange权限角色ID
    比如Exchange.ManageAsApp这个应用权限,从Exchange服务主体的AppRoles里提取:

    $exchangeRole = $exchangeServicePrincipal.AppRoles | Where-Object { $_.Value -eq "Exchange.ManageAsApp" }
    
  3. 给目标服务主体分配权限
    假设你已经创建了服务主体$targetSp,执行分配:

    New-MgServicePrincipalAppRoleAssignment `
      -ServicePrincipalId $targetSp.Id `
      -PrincipalId $targetSp.Id `
      -ResourceId $exchangeServicePrincipal.Id `
      -AppRoleId $exchangeRole.Id
    

这样全程只用Graph命令,完全不需要调用Connect-ExchangeOnline,自然也就不会有多次登录的问题了。

注意事项

  • 方案一中,一定要确保Connect-MgGraph的scope包含了Exchange Online所需的权限,否则令牌会无法通过Exchange的验证。
  • 方案二中,你需要确保登录Graph的账号拥有足够的权限(比如Application Administrator或Exchange Administrator)来给服务主体分配Exchange权限。

备注:内容来源于stack exchange,提问作者Kevin Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 14:52:57