Как использовать аутентификацию на основе сертификата управления для вызовов REST API в Azure?

Я пытаюсь получить информацию об использовании и прейскурантах из Microsoft Azure с помощью java-приложения, и я понял, что могу использовать сертификат управления для аутентификации при совершении вызовов в Microsoft Azure.

Я получил сертификат управления из файла .publishsettings, который я получил из здесь

Однако в AuthenticationContext я не вижу никакого метода, использующего этот сертификат для получения маркера доступа, необходимого для выполнения вызовов API использования и оценки.

Я попытался сослаться на этот ответ, но не вижу клиенты доступны для использования и прейскуранта, и ответ относится к ManagementClient, который не подходит для моего варианта использования. Я также сослался на этот блог, в котором есть ссылка на ClientAssertionCertificate , которую я не вижу в java-библиотека для adal.

Примечание: я могу совершать вызовы REST API в Azure для получения информации об использовании и прейскурантах, используя механизм аутентификации на основе имени пользователя, пароля и идентификатора клиента, но я хотел использовать этот механизм сертификатов управления, поскольку пользователи моего приложения могут не доверять этому приложению со своими учетными данными, и этот механизм на основе сертификата кажется более простым в использовании с точки зрения пользователя.


person jobin    schedule 05.10.2015    source источник


Ответы (2)


Однако в AuthenticationContext я не вижу никакого метода, который использует этот сертификат для получения маркера доступа, необходимого для выполнения вызовов API использования и оценки.

Я также сослался на этот блог, в котором есть ссылка на ClientAssertionCertificate , которого я не вижу в java-библиотеке для adal.

Как сказал Гаурав, мы можем вызывать только Usage & Rate Card API, используя Azure Active Directory для аутентификации. Вы можете использовать AuthenticationContext для получения access_token в следующем коде. Вам необходимо указать client ID и Client Secret(key).

private AuthenticationResult getAccessTokenFromClientCredentials()
            throws Throwable {
        AuthenticationContext context = null;
        AuthenticationResult result = null;
        ExecutorService service = null;
        try {
            service = Executors.newFixedThreadPool(1);
            context = new AuthenticationContext(authority + tenant + "/", true,
                    service);
            Future<AuthenticationResult> future = context.acquireToken(
                    "https://graph.windows.net", new ClientCredential(clientId,
                            clientSecret), null);
            result = future.get();
        } catch (ExecutionException e) {
            throw e.getCause();
        } finally {
            service.shutdown();
        }

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

NB: я могу совершать вызовы REST API в Azure для получения информации об использовании и прейскурантах, используя механизм аутентификации на основе имени пользователя, пароля и идентификатора клиента,.....

Похоже, мы не можем использовать механизм сертификатов управления для вызова API использования и тарифных карт. Поскольку этот вызывающий пользователь или субъект-служба является членом Owner, Contributor or Reader role в клиенте Azure AD для запрошенной подписки (см. этот документ). Я рекомендую вам обратиться к этому документу о том, как аутентифицировать Azure Resource Management.

person Will Shao - MSFT    schedule 08.10.2015

Простой ответ: вы не можете использовать сертификат управления для использования Billing API. Биллинговый API по сути является частью более новых API, которые используют токены Azure AD.

Сертификат управления можно использовать только для Service Management APIs.

person Gaurav Mantri    schedule 05.10.2015
comment
Означает ли это, что нет другого способа, кроме как получить имя пользователя и пароль пользователя, чтобы получить данные из API использования и прейскуранта? - person jobin; 06.10.2015
comment
Это правильно. ИМХО, это правильный подход к делу. При использовании сертификата управления лицо, владеющее сертификатом, имеет полный контроль над вашей подпиской Azure. При таком подходе вы получаете управление доступом на основе ролей, поэтому вы можете предоставлять детализированные разрешения пользователям вашей подписки Azure. - person Gaurav Mantri; 06.10.2015