Проверка подлинности на основе сертификата клиента 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 … | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ | Набор параметров невозможно разрешить с помощью указанных именованных параметров. Один или несколько выданных параметров не могут использоваться вместе, или было предоставлено недостаточное количество параметров.

Можете ли вы отредактировать вопрос, поделившись скриншотом сообщения об ошибке?

Pratik Jadhav 24.08.2024 00:51

От: -StartDate $cert.NotBefore -EndDate $cert.NotAfter Кому: -StartDate Get-Date -EndDate (Get-Date).AddYears(1)

jdweng 24.08.2024 09:54
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
2
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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)"

Ссылка:

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

Спасибо за ваш ответ. Я очень близко. Единственная ошибка сейчас: Add-AzADAppPermission -ObjectId $app. -Пид "00000003-0000-0000-C000-000000000000" -PermissionId "E1FE6DD8-BA31-4D61-89E7-88639DA4683D" PS C: \ users \ Andrew> $ App = Get-Azadapppermiss Users\Andrew> Add-AzADAppPermission -ObjectId $app.AppId -ApiId "00000003-0000-0000-c000-000000000000" -PermissionId "e1fe6dd8-ba31-4d61-89e7-88639da4683d" Add-AzADAppPermission: невозможно обработать аргумент преобразование по параметру ' Идентификатор объекта». Невозможно преобразовать значение null в тип «System.Guid».

Bigbear 28.08.2024 00:02

Попробуйте Add-AzADAppPermission -ObjectId $app.Id -ApiId 00000003-0000-0000-c000-000000000000 -PermissionId e1fe6dd8-ba31-4d61-89e7-88639da4683dВыход

Pratik Jadhav 28.08.2024 08:40

Спасибо! за ваш ответ, который преодолел мое препятствие!

Bigbear 28.08.2024 19:31

Другие вопросы по теме

Как я могу показать вывод $(команды), который вызывается внутри сценария .ps1
Как получить значение роли приложения с учетом идентификатора роли приложения в Entra ID с помощью Microsoft Graph Powershell?
Как получить список конвейеров в фабрике данных Azure для определенной ветки?
Доступ к параметрам приложения логики в коде сценария PowerShell в стандартных рабочих процессах
Использование API NDepend из сценария Windows PowerShell 5.1 приводит к ошибке регистра букв CLS
Перемещение изображений в подпапках в зависимости от ориентации
Как запросить разрешения OAuth2 для субъектов службы в Entra ID с помощью Microsoft Graph Powershell?
Невозможно обновить переменные в сценарии PowerShell файла yml Azure Devops
Отсутствует терминатор в PowerShell CLI в цикле for с использованием расширенных переменных
Как получить доступ к защищенной переменной в свойстве условия задачи Powershell в конвейере Azure