Я пытаюсь выполнить аутентификацию пользователей в своем веб-приложении с помощью 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;
}
Можете ли вы поделиться информацией о URL-адресе входа, который вы создаете для пользователя? Используете ли вы «общую» конечную точку или конкретную конечную точку арендатора? Как вы добавили гостевого пользователя? –
Я добавил гостевого пользователя через интерфейс Azure, после чего я получил приглашение по электронной почте для пользователя. После того как я выполнил инструкции в приглашении, пользователь был добавлен в мой каталог. Я использую «общую» конечную точку. Мой код для аутентификации выглядит так: context = new AuthenticationContext ("https://login.windows.net/common", false, service); Будущее <АутентификацияРезультат> future = context.acquireToken ( "https://graph.windows.net", CLIENT_ID, имя пользователя, пароль, null); –
В этом фрагменте кода, что такое «сервис» ... также вы должны использовать конечную точку «login.microsoftonline.com». Также существует определенная причина, по которой вы передаете имя пользователя и пароль, чтобы получить токен, а не следовать [потоку предоставления кода авторизации] (https://docs.microsoft.com/en-us/azure/active-directory/develop/активно-каталог-протоколы-OAuth-код)? –