2015-02-18 2 views
13

У меня есть REST API, написанный на C#, и мне нужно пройти аутентификацию с помощью существующей службы Azure AD. В настоящее время у меня есть имя пользователя и пароль пользователя, желающего пройти аутентификацию. Мне нужно пройти аутентификацию с помощью Azure AD и получить токен доступа с сервера.Как аутентифицировать пользователя с помощью Azure Active Directory с использованием OAuth 2.0?

Может кто-нибудь указать мне в сторону некоторых статей/учебников, которые объясняют, как это сделать?

+5

Вы имеете в виду, как использовать OAuth 2.0 с Azure ОБЪЯВЛЕНИЕ? Процесс вызова по вызову описан [здесь] (https://msdn.microsoft.com/en-us/library/azure/dn645543.aspx). [Лаборатория аутентификации ADA] (https://msdn.microsoft.com/en-us/library/azure/jj573266.aspx) упрощает этот процесс –

+0

Спасибо - это именно то, что мне нужно – COBOL

+0

Тот факт, что вы упоминаете, что учетные данные пользователей заставляют меня нервничать. Не могли бы вы добавить немного более подробно на ваш вопрос. Является сценарий: собственное приложение -> ваш API REST -> API Azure AD Rest. Или это: Веб-приложение -> ваш API REST -> API Azure AD Rest. Или что-то другое. В зависимости от точного сценария я могу указать вам образцы, которые не позволят вам когда-либо обрабатывать учетные данные пользователей, что было бы намного безопаснее с точки зрения безопасности. –

ответ

11

Вам следует избегать использования учетных данных пользователей. При сборе учетных данных пользователей, которые смягчаются с помощью OAuth 2.0 или OpenID Connect, возникают серьезные последствия для безопасности, чтобы получить токен без прямой обработки учетных данных. Кроме того, если у вас есть собственный пользовательский интерфейс сбора удостоверений, вы можете обнаружить, что в будущем этот знак не будет завершен, если включена многофакторная аутентификация. В этом случае может потребоваться дополнительная информация для аутентификации пользователя, чем вы собираете, например, один раз. Если вы разрешите Azure AD представить опыт аутентификации через OAuth 2.0 или OpenID Connect, то вы изолированы от конкретного используемого метода аутентификации. Сбор пользователей. Значения учетных данных Azure - это плохая практика, которой следует избегать, если это вообще возможно.

У меня недостаточно подробностей относительно точного сценария, чтобы быть уверенным, что применяется следующий образец, но он по крайней мере обеспечит хорошую отправную точку. В этом примере показано, как создать собственное приложение, которое вызывает REST API, который затем может называть ресурс Azure самым безопасным способом.

https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet

Вы можете найти много других образцов здесь, которые могут быть использованы для построения решения для конкретного сценария.

https://github.com/AzureADSamples

Если вы предоставите еще некоторые детали я могу дать более конкретные указания.

+0

Привет, У меня есть приложение для Android, которое отправляет через имя пользователя и пароль мой API REST. Затем REST API должен проверить правильность этой комбинации имени пользователя и пароля с использованием существующего сервера Azure AD. Если это правильно, REST API будет обрабатывать генерацию токена доступа, который приложение будет использовать для связи с моим REST API. – COBOL

+2

Пожалуйста, избегайте транспортировки имени пользователя и пароля. Везде, где вы работаете с именем пользователя и паролем, это еще одно потенциальное место для взлома учетной записи пользователя. Токены, возвращенные из AAD, ограничены определенной областью.Если один из этих токенов скомпрометирован, серьезность компромисса значительно меньше, чем скомпрометированный пароль пользователя. Почему вы собираете пароль пользователя напрямую? Можно ли это изменить? –

+0

Существуют ситуации, связанные с соблюдением, когда приложения должны проверять учетные данные в приложении для запроса. Кажется, нет никакого способа обойти это без приобретения кредитов от клиентского приложения, а затем проверки с помощью Azure на сервере (C# в клиентском приложении). – im1dermike

4

См: http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-users-via-usernamepassword/

Резюме: Создать UserCredential

UserCredential uc = new UserCredential(user, password); 

Вызов один из AcquireToken() функции с UserCredential

public AuthenticationResult AcquireToken(string resource, string clientId, UserCredential userCredential); 
public Task<AuthenticationResult> AcquireTokenAsync(string resource, string clientId, UserCredential userCredential); 
+0

Что такое ресурс? – kat1330

+1

@ ivan.petrovic ** Ресурс: ** URI идентификатора приложения веб-API (защищенный ресурс). Чтобы найти URI идентификатора приложения веб-API, на портале управления Azure выберите Active Directory, щелкните каталог, щелкните приложение и нажмите «Настроить». https://azure.microsoft.com/en-us/documentation/articles/active-directory-protocols-oauth-code/ – sandiejat

+0

Из той же статьи: вы можете использовать эти потоки только с ** родного ** клиента. Конфиденциальный клиент, такой как веб-сайт, не может использовать прямые учетные данные пользователя. –

Смежные вопросы