我有两个问题。
我已经创建了一个企业应用程序并使用 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 。
要做的第一件事是检查 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 的一件事是委托和应用程序权限,因此您需要确保您已授予应用程序权限而不是委托权限。