2017-01-30 18 views
1

Я пытаюсь выполнить аутентификацию пользователей в своем веб-приложении с помощью Azure AD для хранения записей пользователей. Для аутентификации пользователя я использую ADAL4J API (https://github.com/AzureAD/azure-activedirectory-library-for-java). Я использую метод AuthenticationContext.acquireToken() для получения токена для пользователей. Это работает для локальных пользователей в моем каталоге, но не для гостевых пользователей, приглашенных в каталог.Аутентификация гостевого пользователя в Azure AD с использованием графика api

При аутентификации гостевых пользователей я получаю сообщение об ошибке: «Чтобы войти в это приложение, учетная запись должна быть добавлена ​​в каталог». Тем не менее, я уверен, что пользователь был успешно добавлен в каталог, как видно через Azure Portal. Кроме того, я проверил то же самое с помощью API-интерфейса графика, где я могу видеть гостевых пользователей в списке пользователей в каталоге.

Итак, вопрос в том, как я могу аутентифицировать гостевого пользователя в своем веб-приложении с помощью кода (а не путем перенаправления на интерфейс Azure)?

EDIT: Этот метод, к которому я прохожу имя пользователя и пароль пользователя:

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("https://login.windows.net/<tenant_name>", false, service); 
     Future<AuthenticationResult> future = context.acquireToken(
      "https://graph.windows.net", CLIENT_ID, username, password, 
      null); 
     result = future.get(); 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } finally { 
     service.shutdown(); 
    } 

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

Можете ли вы поделиться информацией о URL-адресе входа, который вы создаете для пользователя? Используете ли вы «общую» конечную точку или конкретную конечную точку арендатора? Как вы добавили гостевого пользователя? –

+0

Я добавил гостевого пользователя через интерфейс Azure, после чего я получил приглашение по электронной почте для пользователя. После того как я выполнил инструкции в приглашении, пользователь был добавлен в мой каталог. Я использую «общую» конечную точку. Мой код для аутентификации выглядит так: context = new AuthenticationContext ("https://login.windows.net/common", false, service); Будущее <АутентификацияРезультат> future = context.acquireToken ( "https://graph.windows.net", CLIENT_ID, имя пользователя, пароль, null); –

+0

В этом фрагменте кода, что такое «сервис» ... также вы должны использовать конечную точку «login.microsoftonline.com». Также существует определенная причина, по которой вы передаете имя пользователя и пароль, чтобы получить токен, а не следовать [потоку предоставления кода авторизации] (https://docs.microsoft.com/en-us/azure/active-directory/develop/активно-каталог-протоколы-OAuth-код)? –

ответ

1

С вами информацией, я чувствую, что вопрос здесь связан с входом конечной точки. Помните, что общая конечная точка использует зарегистрированного пользователя, чтобы помочь «угадать» конечную точку арендатора для аутентификации. Если вы делаете более сложные вещи, такие как гостевые учетные записи, очень вероятно, что общая конечная точка не будет определять все правильные детали.

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

Дайте мне знать, если это поможет!

+0

Спасибо, Шон, но это не сработало для меня. Я попытался с именем арендатора вместо обычного и получил сообщение об ошибке «Чтобы войти в это приложение, учетная запись должна быть добавлена ​​в каталог ». В случае «общего» сообщения об ошибке говорится: «Чтобы войти в это приложение, учетная запись должна быть добавлена ​​в каталог graph.windows.net». –

+0

сообщение об ошибке, в котором говорится: «нужно добавить в каталог graph.windows.net», не имеет смысла и говорит мне, что в вашем коде есть какая-то ошибка. Вам нужно будет предоставить исходный код здесь, чтобы помочь вам в дальнейшем –

+0

это работает в случае гостевых пользователей, которые были приглашены от других арендаторов Azure AD, но не в случае гостевых пользователей, которых нет у любого арендатора (например, gmail Счет). –