PowerShell 令牌访问权限

问题描述 投票:0回答:1

我有两个问题。

我已经创建了一个企业应用程序并使用 MSAL 生成了一个令牌,该令牌可以成功连接到 MgGraph,但无法使用 Get-MgUser 命令(它引用了权限不足 - 授予的 API 权限如下)。

Microsoft Graph(2)
组织.阅读.全部
用户.阅读

Office 365 Exchange 在线版(1)
交换.管理

第二个问题是当我尝试使用 Connect-Exchangeonline 和令牌时,它说未经授权。

我用来生成令牌的代码如下(变量填充了正确的数据,但出于明显的安全原因我省略了它):

$global:CalendarPermissionsToken = Get-MsalToken -clientID $CalendarPermissionsclientID -clientSecret $CalendarPermissionsclientSecret -tenantID $CalendarPermissionstenantID -ForceRefresh


$global:CalendarPermissionsToken2 = ConvertTo-SecureString $CalendarPermissionsToken.AccessToken -AsPlainText -Force

这允许我成功运行它,但随后不能使用 get-mguser:

Connect-mggraph -AccessToken $CalendarPermissionsToken2

它也不允许我使用这个:

Connect-ExchangeOnline -UserPrincipalName CENSORED -AccessToken $CalendarPermissionsToken2

任何人都可以告诉我我做错了什么吗?我怀疑我需要向应用程序添加一些权限。

我希望能够连接到 Graph 并使用 get-mguser 并能够使用带有令牌的 connect-exchangeonline 。

powershell token exchangewebservices
1个回答
0
投票

要做的第一件事是检查 jwt.io 中的令牌并查看受众和 scp 值,以了解您的令牌实际拥有什么权限以及其在何处有效使用。

这些是两个独立的端点,因此需要两个不同的令牌和两个不同的受众,例如对于 exov3 cmdlet,范围应该是

https://outlook.office365.com/.default 

并且应该是图表

https://graph.microsoft.com/.default

因此,您用于获取 exov3 令牌的代码应该类似于

  $MsalParams = @{
     ClientId = $ClientId
     TenantId = $TenantId
     Scopes   = 'https://outlook.office365.com/.default'
  }
  $username = "[email protected]"
  $password = "*****"
  $Pwd = ConvertTo-SecureString $password -AsPlainText -Force
  $Creds = New-Object System.Management.Automation.PSCredential ($username, $Pwd)

  $MsalResponse = Get-MsalToken @MsalParams -UserCredential $Creds

您的 Graph 令牌代码应该与 Graph 范围类似,然后您可以在 jwt.io 中验证令牌。还要检查 User.Read 的一件事是委托和应用程序权限,因此您需要确保您已授予应用程序权限而不是委托权限。

© www.soinside.com 2019 - 2024. All rights reserved.