Мы создали набор сценариев Powershell для автоматизации процесса создания новых экземпляров нашего веб-приложения в нашей среде Azure. Одна часть этих скриптов использует Graph API для создания нескольких объектов Azure AD, а также соответствующих объектов в Auth0, которые мы используем для единого входа. До сих пор мы не добились успеха в программном создании нового ключа для приложения AAD. Мы пробовали ряд методов, и хотя мы видим, что у получающегося приложения есть ключ (и объект подключения в Auth0 имеет этот ключ в поле Client Secret), мы всегда получаем эту ошибку при попытке аутентификации :Автоматизация создания ключа веб-приложения Azure AD
к этому моменту мы уже получили доступ к приложению к единой регистрации и читать данные каталога в AAD. (Редактирование:. Мы делаем это вручную после provisioning_ticket_URL, который является частью объекта, возвращенного API вызова Auth0 создать объект Connection Этот URL побуждает нас к Azure учетных данных, а затем отображает эту страницу:
)
Эта ошибка сохраняется до тех пор, пока мы вручную не создадим новый ключ для приложения через портал Azure, сохраним приложение и не скопируем вновь созданный ключ в соединение Auth0. Это всегда решает проблему, но мы бы хотели избежать этого дополнительного шага.
В теле приложения AAD, что мы создаем в вызове API, мы имеем этот раздел, который определяет ключ:
"passwordCredentials":
[
{
"startDate": "2016-10-28T20:40:32Z",
"endDate": "2017-10-29T20:40:32Z",
"keyId": "(a GUID)",
"value": "(a Base64 string)"
}
],
Что касается тех ценностей, мы попытались создать их в довольно много разных способов, и он принимает значения в вызове API PUT, но все они все еще дают нам ту же ошибку, когда мы пытаемся войти в систему. В качестве примера мы попытались подключить значения из $ appKeyGUID и $ appKeyValue из этого:
$appKeyGUID = [guid]::NewGuid()
$guidBytes = [System.Text.Encoding]::UTF8.GetBytes($appKeyGUID)
$appKeyValue = [System.Convert]::ToBase64String($guidBytes);
в ключID и значение, respe ctively. Я читал в другом месте, что значение должно составлять 44 символа, хотя этого не будет.
Но похоже, что сама ценность не может быть проблемой. Я попытался создать ключ через портал Azure, используя вызов GET API Graph API для извлечения keyId, а затем hardcoding эти два точных значения в тело приложения, но вход в систему по-прежнему дает ту же ошибку.
Любая идея, где я ошибаюсь?
EDIT: По предложению Филиппа я попытался изменить только отображаемое имя приложения AD через портал, и это действительно решило проблему. Это заставило меня подумать, что, возможно, что-то было не так в другом месте тела приложения, которое фиксировалось при сохранении через портал. Я проверил манифеста до и после того, как сделать это руководство сохранить, и там действительно одна небольшая разница: в разделе RequiredResourceAccess (из которых я узнал отсюда http://www.cloudidentity.com/blog/2015/09/01/azure-ad-permissions-summary-table/ и здесь https://www.microsoftpressstore.com/articles/article.aspx?p=2473127&seqNum=2), у меня было так:
{
"id": "5778995a-e1bf-45b8-affa-663a9f3f4d04",
"type": "Role"
},
{
"id": "5778995a-e1bf-45b8-affa-663a9f3f4d04",
"type": "Scope"
}
Вместо это портал, который изменяет его на
{
"id": "5778995a-e1bf-45b8-affa-663a9f3f4d04",
"type": "Role,Scope"
},
Таким образом, я изменил тело, которое мы отправляем, чтобы соответствовать второму формату. К сожалению, мы все еще получаем ту же ошибку с этим изменением.Кроме того, я подтвердил, что манифест теперь идентичен до и после создания сохранения на портале, а также тело, возвращенное вызовом API GET приложения. Должно быть что-то еще, что сохранение порта меняется, кроме определения приложения.
После этого я попытался использовать API-интерфейс Графа, чтобы выполнить два вызова PATCH, чтобы обновить отображаемое имя, а затем изменить его, надеясь, что он будет вести себя аналогично тому, как это делается через портал и устранить проблему. Я проверил через портал, что вызовы PATCH действительно меняют отображаемое имя приложения. К сожалению, кажется, что эти изменения не устранили проблему, и я все еще получаю исходную ошибку.
Мы создаем приложение с API вызова Graph, как это:
$uri = "https://graph.windows.net/$waadTenant/applications?api-version=1.6"
$newADApp = (Invoke-RestMethod –Uri $uri –Headers $authHeader –Method POST -Body $newappbody –Verbose)
А вот $ newappbody, что мы в конечном итоге, используя для определения приложения. Я оставил некоторые вещи трудно закодированные для устранения неполадок:
{
"odata.type": "Microsoft.DirectoryServices.Application",
"displayName": "customer1",
"homepage": "https://customer1.(our tenant).com",
"identifierUris":
[
"https://customer1.(our tenant).com"
],
"replyUrls":
[
"https://(our tenant).auth0.com/login/callback"
],
"passwordCredentials":
[
{
"startDate": "(a hardcoded date)",
"endDate": "(a hardcoded date)",
"keyId": "(hardcoded GUID that was previously generated by the portal and extracted through an API GET)",
"value": "(hardcoded Base64 like above)"
}
],
"requiredResourceAccess":
[
{
"resourceAppId": "00000002-0000-0000-c000-000000000000",
"resourceAccess":
[
{
"id": "5778995a-e1bf-45b8-affa-663a9f3f4d04",
"type": "Role,Scope"
},
{
"id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
"type": "Scope"
},
{
"id": "6234d376-f627-4f0f-90e0-dff25c5211a3",
"type": "Scope"
}
]
}
]
}
Попробуйте изменить только отображаемое имя и сохранить приложение (без создания нового ключа). Это также устраняет проблему? Можете ли вы поделиться кодом, который используете для создания объектов в Azure AD? Вы упомянули, что уже получили «разрешения» для приложения для входа в систему и чтения каталога - как вы это делаете? –
@PhilippeSignoret Спасибо, что нашли время ответить, Филипп. Я обновил вопрос в ответ - см. Отредактированные разделы выше. – MGS