Генерация токена авторизации для API управления ресурсами Azure Rest - PullRequest
0 голосов
/ 23 декабря 2018

Я собираюсь вызвать API отдыха Azure Resource Management из моего приложения Spring Boot.Для этого мне нужен токен авторизации.После поиска в различных источниках я понял, что нам нужно вызвать POST API для генерации токена авторизации, используя следующий URL:

https://login.microsoftonline.com/{tenant_id}/oauth2/token

с телом запроса ниже.получил путем создания принципа службы и Active Directory

client_secret ресурс
grant_type
tenant_id

весенний загрузочный Java-код:

    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    String url= "https://login.microsoftonline.com/{tenant_id}/oauth2/token";
    AuthTokenBody authTokenBody = service.setBody();
    headers.setContentType(MediaType.APPLICATION_JSON);
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
    HttpEntity<AuthTokenBody> entity = new HttpEntity<>(authTokenBody, headers);
    ResponseEntity response= restTemplate.postForObject(url, entity, ResponseEntity.class);

Но я получаю ошибку ниже:

{"отметка времени": "2018-12-23T11: 52: 58.175 + 0000", "статус": 500, "ошибка": "Внутренняя ошибка сервера", "сообщение": "400 неверный запрос"," path ":" / cdaas / app "}

Подскажите, пожалуйста, как вызывать код аутентификации в Spring-boot для калибровки управления ресурсами Azure.

Заранее спасибо

1 Ответ

0 голосов
/ 25 декабря 2018

Пожалуйста, обратитесь к приведенному ниже коду, он работает для меня.

import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResult;
import com.microsoft.aad.adal4j.ClientCredential; // for service principal

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class GetAuthCode {
    public static void main(String[] args) {
        // Account specific values
        String tenantId = "***";
        String clientId = "***";
        String password = "***";

        // use adal to Authenticate
        AuthenticationContext authContext = null;
        AuthenticationResult authResult = null;
        ExecutorService service = null;

        try {
            service = Executors.newFixedThreadPool(1);
            String url = "https://login.microsoftonline.com/" + tenantId + "/oauth2/authorize";
            authContext = new AuthenticationContext(url,
                    false,
                    service);
            ClientCredential clientCred = new ClientCredential(clientId, password);
            Future<AuthenticationResult> future = authContext.acquireToken(
                    "https://management.azure.com/",
                    clientCred,
                    null);
            authResult = future.get();
            System.out.println(authResult.getAccessToken());
        } catch (Exception ex) {
            // handle exception as needed
        } finally {
            service.shutdown();
        }
    }
}

Подробнее, пожалуйста, перейдите к этому документ .

...