получить доступ к веб-службе Azure Active Directory, защищенной с помощью Java - PullRequest
0 голосов
/ 08 ноября 2019

Вот фон:

  • Служба приложений A, использующая Tomcat и Springboot, предоставляет конечные точки веб-службы. Например, https://xxx.azurewebsites.net/appA/order/1111
  • Веб-приложение A защищено аутентификацией AAD (экспресс-конфигурация). Приложение (веб-приложение) зарегистрировано в AAD. Идентификатор клиента для веб-приложения: [идентификатор клиента] .
  • Секрет клиента [секрет клиента] создается в веб-приложении.
  • Идентификатор каталога AAD: [идентификатор арендатора] .
  • Использование браузера для открытия вышеуказанного URL-адреса. Показывая страницу входа в AD, после ввода учетных данных я могу получить ожидаемый файл json.

Теперь у меня есть другое консольное приложение, которое пытается получить информацию о заказе из веб-приложения A. Код выглядит так:

String AUTHORITY = "https://login.microsoftonline.com/" + [tenant-id];
String ORDER_URL = "https://xxx.azurewebsites.net/appA/order/1111"

ExecutorService service = Executors.newFixedThreadPool(1);
ClientCredential credentials = new ClientCredential([client-id], [client-secret]);

AuthenticationContext context = new AuthenticationContext(AUTHORITY, false, service);

Future<AuthenticationResult> future = context.acquireToken("https://graph.microsoft.com", credentials, null);
AuthenticationResult result = future.get();

String token = result.getAccessToken();
System.out.println(token);

HttpURLConnection conn = (HttpURLConnection) new URL(ORDER_URL).openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "Bearer " + token);
conn.connect();

int responseCode = conn.getResponseCode();
System.out.println(responseCode);

InputStream is = conn.getInputStream();
...

Я могу получить токен, но responseCode 401 и сообщение об ошибке «У вас нет разрешения на просмотр этого каталога или страницы».

Так чтоМне нужно назначить другое разрешение API, чтобы оно работало? Или там какие-то другие настройки пропущены.

1 Ответ

0 голосов
/ 08 ноября 2019

Я могу воспроизвести вашу проблему, resource должно быть client-id или Application ID URI приложения, к которому вы хотите получить доступ, а не график MS https://graph.microsoft.com.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...