Аутентификация функций Azure: Azure Active Directory: используйте группу безопасности для включения удостоверений (пользователей и субъектов-служб) для доступа к функции
У меня есть функция Azure с включенной проверкой подлинности Azure Active Directory (включая "Действие, которое необходимо предпринять, если запрос не прошел проверку подлинности" = "Войти с помощью Azure Active Directory"). Дополнительно опция "Требуется назначение пользователя?" участника службы, связанного с функцией Azure (sp_func), имеет значение "Да", чтобы в конечном итоге все в клиенте не могли выполнить функцию.
Цель состоит в том, чтобы иметь единую группу безопасности (которая может включать пользователей, а также участников служб), которая добавляется в "Пользователи и группы" процедуры sp_func, чтобы назначение группе решало, можно ли получить доступ к функции или нет. С пользователями это работает нормально, но не с участниками служб (sp_nonfunc). Чтобы они (sp_nonfunc) работали, я должен установить для них разрешения (sp_nonfunc), что в конечном итоге позволяет им взаимодействовать с функцией Azure независимо от того, назначены они (sp_nonfunc) группе или нет.
Возможно ли, что я могу просто добавить участника-службы (sp_nonfunc) в группу с добавлением группы в sp_func, а затем иметь возможность выполнять функцию с помощью sp_nonfunc (без предоставления явных разрешений для sp_nonfunc)?
РЕДАКТИРОВАТЬ: также кажется невозможным добавить sp_nonfunc к sp_func напрямую, даже если я определил собственный appRole в манифесте. В настоящее время кажется, что единственный способ - добавить разрешения на sp_nonfunc для sp_func, но этого я хочу избежать.
EDIT2: вот как я определил роль в манифесте sp_func
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"displayName": "AzureFunctionAccess",
"id": "xxx-xxx-xxx-xxx-xxx",
"isEnabled": true,
"description": "Access Azure Function.",
"value": "AzureFunctionAccess"
}
]
EDIT3: когда я не назначаю роль непосредственно sp_nonfunc, а просто добавляю sp_nonfunc в группу безопасности, которую я получаю, при запросе кhttps://login.microsoftonline.com/<tenant id>/oauth2/token
с resource = Application ID URI зарегистрированного приложения sp_func:
{
"error": "invalid_grant",
"error_description": "AADSTS501051: Application 'xxx-xxx-xx-xx-xx'(xxx) is not assigned to a role for the application 'https://xxx'(xxx).\r\nTrace ID: xxx-xxx-xx-xx-xx\r\nCorrelation ID: xxx-xxx-xx-xx-xx\r\nTimestamp: xx-xx-xx xx:xx:xxZ",
"error_codes": [
501051
],
"timestamp": "xx-xx-xx xx:xx:xxZ",
"trace_id": "5xxx-xxx-xx-xx-xx",
"correlation_id": "xxx-xxx-xx-xx-xx",
"error_uri": "https://login.microsoftonline.com/error?code=501051"
}
1 ответ
Этот способ не сработает, чтобы использовать субъект-службу (в вашем случае sp_nonfunc
) получить токен для функции app (sp_func
) вам необходимо предоставить разрешение API для sp_nonfunc
.
Перейдите к регистрации приложения, связанной с процедурой sp_nonfunc на портале -> API permissions
-> добавить AzureFunctionAccess
вы определили, наконец нажмите Grant admin consent for xxx
кнопка.
Затем получите токен с потоком учетных данных клиента, он будет работать нормально. (Я использую конечную точку v2.0, если вы используете v1.0, она также будет работать.)
Для получения более подробной информации о шагах, которые я писал в этом посте ранее, вы можете обратиться к нему.