Как использовать проверку подлинности на основе сертификатов управления для вызовов API REST в Azure?
Я пытаюсь получить информацию об использовании и тарифной карте от Microsoft Azure с помощью Java-приложения, и я понял, что могу использовать сертификат управления для аутентификации при совершении звонков в Microsoft Azure.
Я получил сертификат управления из файла.publishsettings, который получил здесь
Однако в AuthenticationContext
Я не вижу метода, который использует этот сертификат для получения токена доступа, необходимого для использования и оценки вызовов API.
Я попытался сослаться на этот ответ, но я не вижу клиентов, доступных для использования и прейскуранта, и ответ относится к ManagementClient, который не подходит для моего варианта использования. Я также ссылался на этот блог, который ссылается на ClientAssertionCertificate
, который я не вижу в библиотеке Java для Адала.
NB. Я могу совершать вызовы API REST в Azure для получения информации об использовании и тарифной карте, используя механизм аутентификации на основе имени пользователя, пароля и идентификатора клиента, но я хотел использовать этот механизм сертификата управления, поскольку пользователи моего приложения могут этого не делать. доверяйте этому приложению свои учетные данные, и этот механизм на основе сертификатов кажется более простым в использовании с точки зрения пользователя.
2 ответа
Однако в AuthenticationContext я не вижу ни одного метода, использующего этот сертификат для получения токена доступа, необходимого для использования и оценки вызовов API.
Я также ссылался на этот блог, который ссылается на ClientAssertionCertificate, который я не вижу в java-библиотеке для adal.
Как сказал Гаурав, мы можем только вызывать API Usage & Rate Card, используя 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. Я могу совершать вызовы API REST в Azure для получения информации об использовании и тарифной карте, используя механизм аутентификации на основе имени пользователя, пароля и идентификатора клиента,.....
Кажется, что мы не можем использовать механизм сертификата управления для вызова API использования и тарифной карты. Потому что эти вызывающий пользователь или участник службы является членом Owner, Contributor or Reader role
в клиенте Azure AD для запрошенной подписки ( см. этот документ). Я рекомендую вам обратиться к этому документу о том, как аутентифицировать Azure Resource Management.
Ответ прост: вы не можете использовать сертификат управления для использования Billing API. API биллинга по сути являются частью более новых API, использующих токены Azure AD.
Сертификат управления может быть использован только для Service Management APIs
,