Teams PowerShell 模块中基于应用程序的身份验证

Teams PowerShell 模块中现在支持基于应用程序的身份验证

  • 商业版 4.7.1 预览版或更高版本,& GCC 环境中使用。
  • GCC High & DoD 环境中的版本 5.0.1-preview 或更高版本。

支持的 Cmdlet

现在支持所有 cmdlet,下面提到的 cmdlet 除外。

  • New-Team
  • [获取|设置|新建|Sync]-CsOnlineApplicationInstance
  • *PolicyPackage*
  • *-CsTeamsShiftsConnection*
  • *-CsBatchTeamsDeployment*
  • [获取|Set]-CsTeamsSettingsCustomApp
  • Get-MultiGeoRegion

示例

以下示例演示如何将 Teams PowerShell 模块与基于Microsoft Entra应用的身份验证配合使用:

  • 使用证书指纹进行连接:

    Connect-MicrosoftTeams -CertificateThumbprint "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -ApplicationId "00000000-0000-0000-0000-000000000000" -TenantId "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY"
    

    使用 CertificateThumbprint 参数时,需要在运行命令的计算机上安装证书。 证书应安装在用户证书存储中。

  • 使用证书对象进行连接:

    Connect-MicrosoftTeams -Certificate <%X509Certificate2 object%> -ApplicationId "00000000-0000-0000-0000-000000000000" -TenantId "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY"
    

    使用 Certificate 参数时,无需在运行命令的计算机上安装证书。 运行脚本时,可以远程存储证书 & 提取证书。 Teams PowerShell 模块版本 4.9.2-preview 或更高版本中提供了 Certificate 参数。

  • 使用访问令牌进行连接:

    可以通过 login.microsoftonline.com 终结点检索访问令牌。 它需要两个访问令牌 -“MS Graph”和“Skype 和 Teams 租户管理员 API”资源。

    $ClientSecret   = "…"
    $ApplicationID = "00000000-0000-0000-0000-000000000000"
    $TenantID = "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY"
    
    $graphtokenBody = @{   
       Grant_Type    = "client_credentials"   
       Scope         = "https://graph.microsoft.com/.default"   
       Client_Id     = $ApplicationID   
       Client_Secret = $ClientSecret   
    }  
    
    $graphToken = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantID/oauth2/v2.0/token" -Method POST -Body $graphtokenBody | Select-Object -ExpandProperty Access_Token 
    
    $teamstokenBody = @{   
       Grant_Type    = "client_credentials"   
       Scope         = "48ac35b8-9aa8-4d74-927d-1f4a14a0b239/.default"   
       Client_Id     = $ApplicationID   
       Client_Secret = $ClientSecret 
    } 
    
    $teamsToken = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantID/oauth2/v2.0/token" -Method POST -Body $teamstokenBody | Select-Object -ExpandProperty Access_Token 
    
    Connect-MicrosoftTeams -AccessTokens @("$graphToken", "$teamsToken")
    

它是如何工作的?

Teams PowerShell 模块使用应用程序 ID、租户 ID 和证书指纹提取基于应用的令牌。 Microsoft Entra ID 中预配的应用程序对象具有分配给它的目录角色,该角色在访问令牌中返回。 会话的基于角色的访问控制 (RBAC) 是使用令牌中提供的目录角色信息配置的。

设置基于应用程序的身份验证

使用应用程序对象进行身份验证需要初始载入。 应用程序和服务主体可互换使用,但应用程序类似于类对象,而服务主体类似于 类的实例。 有关这些对象的详细信息,请参阅Microsoft Entra ID 中的应用程序和服务主体对象

下面介绍了使用 Microsoft Entra ID 创建应用程序的示例步骤。 有关详细步骤,请参阅 本文

  1. 在MICROSOFT ENTRA ID 中注册应用程序。
  2. 为应用程序分配 API 权限。
    • 对于 *-Cs cmdlet - 所需的 Microsoft 图形 API 权限为 Organization.Read.All
    • 对于非 *-Cs cmdlet - 所需的 Microsoft 图形 API权限为 Organization.Read.All、、User.Read.AllGroup.ReadWrite.AllAppCatalog.ReadWrite.AllTeamSettings.ReadWrite.AllChannel.Delete.AllChannelSettings.ReadWrite.All、、 。 ChannelMember.ReadWrite.All
  3. 生成自签名证书。
  4. 将证书附加到 Microsoft Entra 应用程序。
  5. 将Microsoft Entra角色分配给应用程序。 请参阅此 分配角色 过程,但搜索应用程序而不是用户。

应用程序需要分配适当的 RBAC 角色。 由于应用是在Microsoft Entra ID 中预配的,因此可以使用任何受支持的内置角色。