Проверка подлинности в API Azure Log Analytics с использованием учетных данных клиента OAuth2.0 - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь получить доступ к своему приложению Azure, зарегистрированному в Azure Active Directory (AAD). Я использую протокол учетных данных клиента OAuth2.O (https://dev.loganalytics.io/documentation/Authorization/OAuth2).

Использование клиента Rest (Почтальон) Я могу подключиться. Но мне нужно сделать то же самое в моем приложении Java.

Есть 2 этапа подключения

  1. Для получения токена доступа.

    POST  https://login.microsoftonline.com/YOUR_AAD_TENANT/oauth2/token    
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=client_credentials
    &client_id=YOUR_CLIENT_ID
    &redirect_uri=YOUR_REDIRECT_URI
    &resource=https://management.azure.com/
    &client_secret=YOUR_CLIENT_SECRET 
    
  2. Чтобы сделать запрос к рабочему пространству с помощью токена доступа

    POST https://api.loganalytics.io/v1/workspaces/8fXXXXX-0a84-XXX-XXX- c1a5XXXXXX/query?timespan=P1D
    
    Authorization: Bearer [access_token]      
    {
        "query": "AzureActivity | limit 10"
    }
    

Может кто-нибудь помочь мне написать клиент java, чтобы сделать выше? Я ссылался на следующие ссылки:

Но они не используют идентификатор арендатора и тип предоставления не client_credentials.

1 Ответ

0 голосов
/ 10 января 2019

Попробуйте код, как показано ниже, используйте authResult.getAccessToken(), чтобы получить токен доступа, он должен работать.

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.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

// Account specific values
String tenantId = <your tenant id>
String clientId = <your client id>
String password = <your 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();
} catch (Exception ex) {
    // handle exception as needed
} finally {
    service.shutdown();
}

Подробнее см. По этой ссылке .

...