Проверка подлинности на основе сертификата клиента Azure

Я создаю сценарий PowerShell, который создает самозаверяющий сертификат и добавляет его в регистрацию приложения клиента Azure.

Я хочу назначить разрешения на использование разрешения на чтениеgraph.api.

Я собираюсь использовать аутентификацию на основе сертификата. Я смог пройти аутентификацию с помощью сертификата, но мне все еще нужно выяснить, как добавить группу ресурсов или идентификатор подписки, который я предполагаю, к регистрации этого приложения через PS.

$cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject $applicationName -KeySpec KeyExchange -NotAfter (Get-Date).AddYears(1)

$keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData())

$application = New-AzADApplication -DisplayName $applicationName 
$objectId = $application.Id
$applicationId = $application.AppId

Write-Host "ID: $($objectId)   -   AppID: $($applicationId)"

Write-Host "Going to Sleep"
Start-Sleep -Seconds 2
Write-Host "Awake"

$sp = New-AzADServicePrincipal -ApplicationId $applicationId -CertValue $keyValue -StartDate $cert.NotBefore -EndDate $cert.NotAfter
Start-Sleep 5

Add-AzADAppPermission -ObjectId $objectId -ApiId "00000003-0000-0000-c000-000000000000" -PermissionId "5f8c59db-677d-491f-a6b8-5f174b11ec1d"


Write-Host "Generated Thumbprint: $($cert.Thumbprint)"

# Export the certificate to a PFX file
$cert | Export-PfxCertificate -FilePath $certFilePath -Password (ConvertTo-SecureString -String $certPassword -Force -AsPlainText)

Write-Host "Certificate Created and placed in: $($certFilePath)"

Start-Sleep -Seconds 2

Вот какую ошибку я получил.

Новый-AzADServicePrincipal: линия | 53 | $sp = New-AzADServicePrincipal -ApplicationId $applicationId -CertVal … | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ | Набор параметров невозможно разрешить с помощью указанных именованных параметров. Один или несколько выданных параметров не могут использоваться вместе, или было предоставлено недостаточное количество параметров.

🤔 А знаете ли вы, что...
С PowerShell можно создавать расписания задач и автоматически выполнять скрипты в определенное время.


73
1

Ответ:

Решено

Когда я попытался воспроизвести ваш сценарий PowerShell в своей среде, я получил ту же ошибку:

Чтобы устранить ошибку, используйте приведенный ниже сценарий Powershell:

Создание приложения Microsoft Entra ID:

$tenantId = "your_tenant_id"
$applicationName = "your_app_name"

# Create a self-signed certificate
$cert = New-SelfSignedCertificate -CertStoreLocation "cert:\CurrentUser\My" -Subject $applicationName -KeySpec KeyExchange -NotAfter (Get-Date).AddYears(1)

# Get the certificate thumbprint
$thumbprint = $cert.Thumbprint

# Create a new Azure AD application
$app = New-AzADApplication -DisplayName $applicationName 

Добавлен сертификат в приложение:

New-AzADAppCredential -ApplicationId $app.AppId -CertValue ([System.Convert]::ToBase64String($cert.GetRawCertData())) -StartDate $cert.NotBefore -EndDate $cert.NotAfter

Колонка разрешения API перед добавлением разрешения API:

Для добавления субъекта-службы и User.Read разрешения API делегированного типа:

 $servicePrincipal = New-AzADServicePrincipal -ApplicationId <application_id>
 
#For adding delegated type User.Read permission
Add-AzADAppPermission -ObjectId <object_id> -ApiId 00000003-0000-0000-c000-000000000000 -PermissionId e1fe6dd8-ba31-4d61-89e7-88639da4683d

Экспортный сертификат:

 $certFilePath = "<FilePath>"

$certPassword = "<YourPassword>"

#Exporting certificate

$cert | Export-PfxCertificate -FilePath $certFilePath -Password (ConvertTo-SecureString -String $certPassword -Force -AsPlainText)

Write-Host "Certificate Created and placed in: $($certFilePath)"

Ссылка:

Создайте самозаверяющий общедоступный сертификат для аутентификации вашего приложения.