MSAL JAVA WEB API для DNS и записей - PullRequest
0 голосов
/ 09 апреля 2020

Как мы можем создать DNS-зоны и записи на сервере azure, используя Azure API веб-сервисов с последней библиотекой MSAL, не основанной на ADAL? Однако dns libarary support https://github.com/Azure-Samples/dns-java-host-and-manage-your-domains не упоминает какой-либо способ использования с помощью токена доступа MSAL. например,

    ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(client, tenant, key, AzureEnvironment.AZURE);
azure = Azure.authenticate(credentials).withSubscription(subscriptionId);
ResourceGroup resourceGroup = azure.resourceGroups().define(rgName)
        .withRegion(Region.US_EAST2)
        .create();

System.out.println("Creating root DNS zone " + customDomainName + "...");
DnsZone rootDnsZone = azure.dnsZones().define(customDomainName)
        .withExistingResourceGroup(resourceGroup)
        .create();

Но он использует ключи вместо токенов доступа, предоставленных msal. это уже может быть достигнуто старыми способами, которые используют ADAL для внутреннего использования azure.

1 Ответ

1 голос
/ 10 апреля 2020

Если вы хотите использовать Azure java SDK для управления Azure DNS с токеном доступа AD, обратитесь к следующему коду

a. создать принципала службы (для этого я использую Azure CLI)

az login
az account set --subscription "<your subscription id>"
# the sp will have Azure Contributor role
az ad sp create-for-rbac -n "readMetric" 

enter image description here

Код
 public void test() throws MalformedURLException, ExecutionException, InterruptedException {



        AzureTokenCredentials tokenCredentials = new AzureTokenCredentials(AzureEnvironment.AZURE,ADProperty.tenantId) {
            @Override
            public String getToken(String resource) throws IOException {
                String token =null;
                // use msal to get Azure AD access token
                ConfidentialClientApplication app = ConfidentialClientApplication.builder(
                        ADProperty.clientId,  // sp appid
                        ClientCredentialFactory.createFromSecret(ADProperty.clientKey)) // sp password
                        .authority(ADProperty.authority) // "https://login.microsoftonline.com/" + sp tenant id
                        .build();
                ClientCredentialParameters clientCredentialParam = ClientCredentialParameters.builder(
                        Collections.singleton("https://management.azure.com/.default"))
                        .build();
                CompletableFuture<IAuthenticationResult> future = app.acquireToken(clientCredentialParam);
                try {
                    token =future.get().accessToken();

                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
                return  token;
            }
        };


        Azure azure = Azure.authenticate(tokenCredentials)
                .withSubscription(ADProperty.subscriptionId); // sp subscription id
        DnsZone rootDnsZone = azure.dnsZones().define("mydevchat.com")
                .withExistingResourceGroup("jimtest")
                .create();
        System.out.println("create DNSZone " + rootDnsZone.name() + " successfully");
}

enter image description here

...