Справка по архитектуре: создание модуля PAM Azure Active Directory

Я заинтересован в создании подключаемого модуля аутентификации Linux (PAM), который выполняет аутентификацию в Azure Active Directory. Похоже, что Microsoft использует для этого Oauth 2.0.

При рассмотрении сценариев аутентификации кажется, что «Демон или серверное приложение», вероятно, имеет наибольший смысл, но я не уверен. «Родное приложение для веб-API» также может быть возможным, но все приведенные потоки приложений показывают запуск экземпляра всплывающего окна браузера для аутентификации, что кажется невозможным в PAM. В результате, если я не удаляю ответы, этот поток не работает, а удаление ответов кажется плохой идеей.

Мои вопросы:

  1. Каков наилучший способ проверки учетных данных пользователя для этого сценария? Демон или родное приложение?
  2. Каков грубый поток, на который я бы посмотрел, чтобы сделать это? (например, если я использую демона, какие вызовы я делаю для проверки учетных данных пользователя?)
  3. Есть идеи, как это выглядит, если для пользователя включена двухфакторная аутентификация?

Спасибо за помощь. Я чувствую, что ни один из доступных вариантов здесь не подходит, и хочу убедиться, что я двигаюсь в правильном направлении, пока не потрачу здесь кучу времени.


person Doug    schedule 30.09.2016    source источник


Ответы (2)


PAM bureado, на который вы указываете, использует то, что известно как OAuth «Предоставление учетных данных пароля владельца ресурса». В основном он берет имя пользователя и пароль пользователя и передает их в Azure AD для аутентификации. Он имеет ряд ограничений, некоторые из которых Витторио описывает здесь. Основная проблема, на которую вы указали, заключается в том, что MFA не работает.

Для подобных сценариев Azure AD также поддерживает OAuth «Поток профиля устройства». Здесь есть пример кода, который показывает, как это сделать в .NET: https://github.com/Azure-Samples/active-directory-dotnet-deviceprofile. Я бы порекомендовал пойти по этому пути.

person dstrockis    schedule 03.10.2016
comment
Спасибо. Это подтвердило мои мысли и предоставило всю необходимую мне информацию. - person Doug; 03.10.2016

Хорошо, я нашел следующий модуль, который, похоже, в основном делает то, что я ищу:

https://github.com/bureado/aad-login

Он решил использовать «Родное приложение». Я все еще не уверен, что это «лучший вариант», и поэтому я оставлю это открытым для других ответов. Я был бы рад, если бы кто-нибудь мог объяснить, почему это лучший вариант.

Между тем, сейчас я пытаюсь импортировать членство в группах AAD, например pam_ldap или pam_kerberos, но мне трудно понять, как это должно работать, и я задал еще один вопрос:

Как написать модуль PAM, который изменяет членство в группе?< /а>

Если кто-то столкнется с этим позже и захочет сделать то же самое, мы планируем открыть исходный код окончательного модифицированного решения с этой расширенной функциональностью. Это еще не сделано, но код находится на GitHub здесь:

https://github.com/CyberNinjas/aad-login

person Doug    schedule 01.10.2016