Аутентификация функций 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"
}

person quervernetzt    schedule 02.07.2020    source источник
comment
Не могли бы вы пояснить, что вы имеете в виду, говоря «добавить sp_nonfunc» непосредственно к sp_func? Не могли бы вы рассказать, как вы определили роль приложения для sp_func?   -  person Philippe Signoret    schedule 02.07.2020
comment
@PhilippeSignoret У меня есть субъект-служба sp_func, который создается в контексте при включении аутентификации через AAD для Функций Azure. Этот субъект-служба используется для проверки подлинности. Когда я включил назначение пользователей, мне нужно (и хочу) добавить удостоверения к участникам службы и группам. И невозможно напрямую добавить другого субъекта-службы к этим пользователям и группам.   -  person quervernetzt    schedule 03.07.2020


Ответы (1)


Этот способ не сработает, чтобы использовать субъект-службу (в вашем случае sp_nonfunc) и получить токен для приложения-функции (sp_func), вам необходимо предоставить разрешение API для sp_nonfunc.

Перейдите к разделу "Регистрация приложения", связанному с процедурой sp_nonfunc на портале - ›API permissions -› добавьте заданный вами AzureFunctionAccess, и, наконец, нажмите кнопку Grant admin consent for xxx.

введите описание изображения здесь

Затем получите токен с потоком учетных данных клиента, он будет работать нормально. (Я использую конечную точку v2.0, если вы используете v1.0, она также будет работать.)

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

введите описание изображения здесь

person Joy Wang    schedule 03.07.2020
comment
Благодарю за ваш ответ. Это то, о чем я знал, но чего я хочу избежать. Назначение группы должно быть решающим фактором, а не в том случае, если sp_nonfunc имеет назначенные разрешения. Цель состоит в том, чтобы членство в группе решало, можете ли вы выполнить функцию или нет. Но это невозможно или? - person quervernetzt; 03.07.2020
comment
@quervernetzt Если вы дадите разрешение api, вы обнаружите, что sp_nonfunc существует в Users and groups sp_func. Но если вы просто добавите группу, в которую входит субъект-служба, в sp_nonfunc нет разрешения api, я не думаю, что вы можете получить токен без разрешения. - person Joy Wang; 03.07.2020