какие разрешения необходимы субъекту-службе для перечисления информации профиля пользователя, например отдела, электронной почты и т. д.
Мне назначено следующее, но я получаю ошибку разрешения. если я назначу приложению роль администратора, оно будет работать. но мне неудобно добавлять эту роль в приложение.
Use.Read.All
с Application Type
достаточно, но не забудьте предоставить согласие администратора (появится зеленая точка). такой как:
Информация о пользователе department
и email
будет отображаться с помощью запроса на выбор. Если запрос на выбор отсутствует, информация об отделе будет скрыта.
Пример кода: с использованием Microsoft Graph Rest API
$tenantId = ""
$clientId = ""
$clientSecret = ""
$headers = @{
"Content-Type" = "application/x-www-form-urlencoded"
}
$uri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
$body = @{
grant_type = "client_credentials"
scope = "https://graph.microsoft.com/.default"
client_id = $clientId
client_secret = $clientSecret
}
$token = $(Invoke-RestMethod -Method Post -Uri $uri -Body $body -Headers $headers).access_token
$objectId = ""
$headers2 = @{
"Content-Type" = "application/json"
"Authorization" = "Bearer " + $token
}
$uri2 = "https://graph.microsoft.com/v1.0/users/{0}?`$select=displayName,givenName,mail,department" -f $objectId
$response = Invoke-RestMethod -Method Get -Uri $uri2 -Headers $headers2
$response
Результат испытаний:
Обратите внимание: подключение к модулю Azure AD PowerShell требует назначения роли читателей каталога (в вашем сценарии) для регистрации приложения, а также разрешений API. Обратитесь к этому блогу NoVestigeOfBeginning.
Без назначения ролей я получил ошибку «Недостаточно прав для завершения операции»:
Чтобы получить информацию профиля пользователя, предоставьте User.Read.All
разрешение API приложения:
И добавим в приложение активное назначение роли читателей Справочника:
Я могу успешно получить профиль пользователя в соответствии с вашими требованиями:
# Define your tenant ID, application ID, and certificate thumbprint
$tenantId = "TenantID"
$applicationId = "APPID"
$certThumbprint = "CertTumbPrint"
# Connect to Azure AD using the certificate
Connect-AzureAD -CertificateThumbprint $certThumbprint -ApplicationId $applicationId -TenantId $tenantId
# Define the company name to filter by
$companyName = "ruk"
$users = Get-AzureADUser -All $true | Where-Object {
$_.CompanyName -eq $companyName -and $_.JobTitle -ne $null
} | Select-Object DisplayName, JobTitle, Mail, Department
# Export the filtered users to a CSV file
$users
В противном случае используйте модуль Microsoft Graph PowerShell, поскольку модуль Azure AD PowerShell будет устаревшим:
User.Read.All
разрешения API типа приложения, предоставленные приложению.# Define your tenant ID, client ID, and certificate thumbprint
$tenantId = "TenantID"
$clientId = "ClientID"
$certThumbprint = "CertThumbprint"
$companyName = "ruk"
# Connect to Microsoft Graph using client credentials and certificate
Connect-MgGraph -ClientId $clientId -TenantId $tenantId -CertificateThumbprint $certThumbprint
# Retrieve users with filtering and selecting specific properties
$filteredUsers = Get-MgUser -Filter "companyName eq '$companyName' and jobTitle ne null" `
-Select "displayName,jobTitle,mail,department" `
-CountVariable CountVar `
-ConsistencyLevel Eventual
# Output the filtered users
$filteredUsers | Format-Table -Property displayName, jobTitle, mail, department -AutoSize
Ссылка:
Используйте команды аутентификации Microsoft Graph PowerShell | Майкрософт
это работает. если я хочу экспортировать результаты, мне следует $filteredUsers | Export-Csv -Path "C:\temp\File.csv" -NoTypeInformation работает?