Невозможно установить объект «preAuthorizedApplications» в новом модуле регистрации приложений через Azure Powershell - PullRequest
1 голос
/ 05 мая 2019

Short Scenrario : веб-приложение с интерфейсом muti-tenant javascript (React.JS) вызывает многопользовательский ASP.NET Core 2.2 WebAPI из браузера.

Аутентификация:

  1. ADAL.js в приложении переднего плана заботится о получении токена из AzureAD1, AzureAD2 или AzureAD3 ... при входе пользователя в систему (на основе исходного Azure Active Directory пользователя).

  2. Пользователь дает согласие на интерфейсное веб-приложение ( область действия: войдите и прочитайте профиль пользователя ), которое также делегировано для WebAPI. ( означает, что пользователю также не требуется согласие с WebAPI )

  3. Внешнее веб-приложение вызывает WebAPI с токеном-носителем для получения ресурсов.

Проблема: я должен автоматизировать развертывание новой среды. И соответственно установите файл манифеста (это решение SaaS)

  1. В файле манифеста мне нужно предоставить WebAPI для клиентского приложения (https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-configure-app-expose-web-apis#expose-a-new-scope-through-the-ui)
  2. Недостаточно установить «knownClientApplications» ( из-за ранее описанного делегирования )
  3. Новая конечная точка v2 (https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-overview) имеет новую функцию регистрации приложений. Старая теперь называется "Legacy" и устареет с мая 2019 года.
  4. В портале Azure необходимо предоставить API и добавить интерфейсный веб-приложение в качестве «Авторизованных приложений».

screendump

Этот шаг добавит новый объект в файл манифеста:

"preAuthorizedApplications": [
        {
            "appId": "guid",
            "permissionIds": [
                "guid"
            ]
        }
    ],
  1. Но он все еще недоступен через PowerShell! (https://docs.microsoft.com/en-us/powershell/module/azuread/set-azureadapplication?view=azureadps-2.0)

Как добавить этот раздел «preAuthorizedApplications» в файл манифеста с помощью Azure PowerShell? Почему он доступен на портале, но еще не в PS? Обычно все наоборот ...

08-05-2019 Обновление на основе ответа:

Я получаю токен доступа через Принципала обслуживания:

$adTokenUrl = "https://login.microsoftonline.com/$TenantId/oauth2/token"
$resource = "https://graph.windows.net/"

$body = @{
    grant_type    = "client_credentials"
    client_id     = "$ServicePrincipalId"
    client_secret = "$ServicePrincipalKey"
    resource      = "$resource"
}

$response = Invoke-RestMethod -Method 'Post' -Uri $adTokenUrl -ContentType "application/x-www-form-urlencoded" -Body $body
$token = $response.access_token

Согласно документам: https://docs.microsoft.com/en-us/graph/api/application-update?view=graph-rest-beta&tabs=cs

Принципал службы должен иметь как минимум Application.ReadWrite.OwnedBy и большинство привилегий Application.ReadWrite.All.

Должен ли я попросить нашего администратора AAD предоставить указанные ниже права Принципалу обслуживания?

screendump



08-05-2019 Обновление 2: Принципал службы получил ВСЕ вышеуказанные права.

Попытка 1:

Шаг 1: получение access_token через Принцип обслуживания (Владелец приложения Api будет обновлен)

$adTokenUrl = "https://login.microsoftonline.com/$(TenantId)/oauth2/token"
$resource = "https://graph.microsoft.com/"

$body = @{
    grant_type    = "client_credentials"
    client_id     = "$(ServicePrincipalId)"
    client_secret = "$(ServicePrincipalKey)"
    resource      = "$resource"
}

$response = Invoke-RestMethod -Method 'Post' -Uri $adTokenUrl -ContentType "application/x-www-form-urlencoded" -Body $body
$token = $response.access_token

Шаг 2: использование этого access_token, создание моего запроса PATCH согласно предложению Md Farid Uddin Kiron и

Результат: удаленный сервер возвратил ошибку: (403) Запрещено.

09-05-2019 Обновление 3: После каких-то подробных и подробных объяснений и рекомендаций я получил это для работы и получил HTTP 204 для моего запроса Почтальона. Осталось только интегрировать эти шаги в мой конвейер.

См. Принятый ответ . Оно работает. Если у кого-то есть такая же проблема, пожалуйста, прочитайте другой ответ от Фарида Уддина Кирона.

Ответы [ 3 ]

1 голос
/ 06 мая 2019

Некоторые дополнения к другому ответу.

На самом деле, в AzureADPreview модуле powershell, есть параметр -PreAuthorizedApplications для Set-AzureADApplication.Но ни справка по командлетам, ни страница документации не были обновлены, чтобы детализировать все это, здесь также упоминалось здесь .

enter image description here

Я не уверен, что параметр будет работать или нет, согласно моему тесту, я всегда получаю ошибку неверного запроса.Даже если я вызываю API-интерфейс Azure AD Graph, я получаю ту же ошибку.Команда Set-AzureADApplication, по сути, вызывает API-интерфейс Azure AD Graph, поэтому, если этот параметр работает, он также будет работать для API.Кроме того, в документе AAD Graph такого свойства нет.Судя по результатам теста, данный параметр в данный момент не работает.(не уверен, если что-то не так, поправьте меня)

1 голос
/ 09 мая 2019

Я тоже получил эту ошибку, используя тип client_credentials, чтобы access_token вызывал этот API, хотя я предоставил все разрешения Microsoft Graph API и приложений AAD API.Это действительно странно.Однако, используя поток паролей для получения токена доступа под учетной записью администратора Azure AD, вы сможете успешно вызывать этот API: enter image description here

Обновление

Вы можете получить свои client id и client secret, выполнив следующие шаги

  1. Перейдите к azure portal в azure active directory меню, см. Экран ниже:

enter image description here

Как только вы выберете azure active directory, вы увидите App registrations, щелкните по нему.Затем выберите ваше приложение.См. Рисунок ниже

enter image description here

В вашем заявлении вы увидите client id, tenant id и client secret, которые отмечены на снимке экрана ниже:

enter image description here

Если у вас все еще есть проблемы, пожалуйста, не стесняйтесь поделиться.Спасибо и счастливого кодирования!

1 голос
/ 06 мая 2019

Вы правы, похоже, что-то не так в модуле PowerShell AzureAD.Это не работает для меня тоже.

Если вы хотите изменить app manifest, используя powershell , чтобы добавить раздел «preAuthorizedApplications», вы можете попробовать скрипт powershell ниже.

Я проверил на своей стороне, и это работает для меня.

Теоретически я позвонил Microsoft Graph API , чтобы изменить app manifest.Если у вас есть какие-либо проблемы, пожалуйста, дайте мне знать.

$AdAdminUserName = "<-your Azure ad admin username ->"

$AdAdminPass="<-your Azure ad admin password ->"

$AdAppObjId = "<-your app obj id->"

$AdPreAuthAppId = "<-the app that need to be pre authed ->"

$AdAppScopeId = "<-your app scope id->"

$tenantName = "<-your tenant name->"


$body=@{
    "grant_type"="password";
    "resource"="https://graph.microsoft.com/";
    "client_id"="1950a258-227b-4e31-a9cf-717495945fc2";
    "username"=$AdAdminUserName;
    "password" = $AdAdminPass
}

$requrl = "https://login.microsoftonline.com/"+$tenantName+"/oauth2/token" 

$result=Invoke-RestMethod -Uri $requrl -Method POST -Body $body 

$headers = New-Object 'System.Collections.Generic.Dictionary[String,String]'
$headers.Add("Content-Type","application/json")
$headers.Add("Authorization","Bearer " + $result.access_token)


$preAuthBody = "{`"api`": {`"preAuthorizedApplications`": [{`"appId`": `"" + $AdPreAuthAppId + "`",`"permissionIds`": [`"" + $AdAppScopeId + "`"]}]}}"

$requrl= "https://graph.microsoft.com/beta/applications/"+$AdAppObjId

Invoke-RestMethod -Uri $requrl -Method PATCH -Body  $preAuthBody  -Headers $headers

Примечание: ROPC небезопасен, так как Microsoft не рекомендует его использовать.Он также не позволяет использовать MFA, поэтому он малоопасен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...