2015-05-02 1 views
1

Я разрабатываю мобильное приложение, в котором мне нужно аутентифицировать пользователя от Azure AD. В основном пользователю будет предложено указать адрес электронной почты организации и пароль, который приложение мобильного телефона отправляет на серверный сервер, который будет проходить проверку подлинности.Получение имени пользователя и информации о группе от Azure с помощью adal4j

У меня есть 'общественно-клиент-приложение-образец' из 'лазурного-ActiveDirectory-библиотека-для-Явы' работает и может авторизовать против 'graph.windows.net':

private static AuthenticationResult getAccessTokenFromUserCredentials(
     String username, String password) throws Exception { 
    AuthenticationContext context = null; 
    AuthenticationResult result = null; 
    ExecutorService service = null; 
    try { 
     service = Executors.newFixedThreadPool(1); 
     context = new AuthenticationContext(AUTHORITY, false, service); 
     Future<AuthenticationResult> future = context.acquireToken(
       "https://graph.windows.net", CLIENT_ID, username, password, 
       null); 
     result = future.get(); 
    } finally { 
     service.shutdown(); 
    } 

    if (result == null) { 
     throw new ServiceUnavailableException(
       "authentication result was null"); 
    } 
    return result; 
} 

Однако , это не возвращает никакой userInfo (равно null), и на данный момент я не могу понять, как запросить, чтобы получить список с группами, к которым принадлежит пользователь?

Я просто выполняю ручные поиски с использованием API, используя маркеры, полученные из Adal4j, или есть ли предусмотренная функция в библиотеке?

Я только начинаю с Azure, так что это может быть очевидно, я мог бы просто искать не в том месте. Я попытался, например. 'https://graph.windows.net/xxx.com/groups?api-version=1.5', но получить 'Resource' https://graph.windows.net/xxx.com/groups?api-version=1.5 'не зарегистрирован для учетной записи.'

+0

W мобильной мобильной платформы, против которой вы развиваетесь? Передача имени пользователя/пароля на ваш собственный сервис на самом деле не рекомендуется. Вместо этого вы можете использовать одну из ADAL-библиотек ([iOS] (https://github.com/AzureAD/azure-activedirectory-library-for-objc), [Android] (https://github.com/AzureAD/azure-activedirectory-library-for-android), [WindowsPhone] (https://github.com/AzureAD/azure-activedirectory-library-for-dotnet)) для аутентификации непосредственно с мобильного устройства с помощью AAD. –

+0

Я использую iOS и Android. Вы прямо из курса, я еще не сообразил.Основная причина передачи учетных данных (через соединение ssl с курса) заключается в том, что у меня есть только одно место для работы с интерфейсом с Azure. Однако для обеспечения безопасности я вижу, что использование библиотек ADAL имеет то преимущество, что вы передаете только ключи. –

+0

Хорошо, я предоставил (и надеюсь) все ваши вопросы, но на самом деле - я бы не рекомендовал этот подход. Моя рекомендация будет заключаться в том, что ваши клиентские приложения используют соответствующие библиотеки ADAL для получения токенов. Это имеет еще одно преимущество в том, что вы можете обеспечить доступ к вашему собственному API с помощью этого ([образец для iOS] (https://github.com/AzureADSamples/NativeClient-iOS), [образец для Android] (https: // github. ком/AzureADSamples/NativeClient-Android)). –

ответ

1

Во-первых, вы абсолютно правы, adal4j не смог вернуть UserInfo. Причиной этого было то, что запрос маркера не включал параметр scope=openid, который требуется, если вызывающий абонент хочет получить ответ id_token. Я открыл issue, и это уже было resolved. Итак, обновленная копия adal4j исправит вашу первую проблему не получения UserInfo.

Теперь, касаясь членства в группе для текущего пользователя: Обычно я бы рекомендовал вам просто configure you application to return the groups claim. Это может быть сделано очень легко за счет изменения манифеста приложения (загрузка и загруженное через Azure портала, под странице конфигурации приложения) включает:

"groupMembershipClaims": "All", 

К сожалению, adal4j еще не включают в себя группы утверждают в результат getUserInfo(), так что, вероятно, вы не будете много работать (issue открыт, это действительно зависит от того, как быстро оно будет реализовано, или если вы хотите реализовать себя).

Несмотря на это, потому что это возможно, чтобы было слишком много групп, чтобы включить в лексемы (указано, приложение должно всегда иметь возможность использовать API AAD Graph для retrieve the full set of groups пользователь является членом.

И это подводит меня к последней точке:. adal4j не реализует клиент из API Azure AD Graph Так что да, вы бы осуществить это самостоятельно (или, возможно, использовать/изменить существующий клиент OData)

.

(Вы можете узнать больше о Group Claims in this Azure AD blog post.)

+0

Спасибо за всесторонний ответ. Я также буду тестировать SDK для iOS и Android и посмотреть, что будет работать лучше всего. Я также посмотрю, на что он поднял выше. Я просто хочу аутентифицировать пользователя, поэтому собственный клиент может это сделать. Как только я установил подлинность пользователя, я могу создать веб-API для моего испеченного, чтобы делать какие-либо запросы, и тогда мне не нужна какая-либо информация о собственном запросе пользователей. Это может быть лучше и экономить. –

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