简体   繁体   中英

Is it possible to use the DeviceCode authentication Flow with Azure Java SDK?

I successfully generate an IAuthenticationResult using the azure msal4j library - I am presented with a device code, and when that code is typed into a browser, it shows the correct scopes / permissions, and now I'd like to take this authentication result and pass it into the Azure-SDK authentication similar to:

    val result = DeviceCodeFlow.acquireTokenDeviceCode()


    val a: Azure = Azure.configure()
        .withLogLevel(LogLevel.BODY_AND_HEADERS)
        .authenticate(AzureCliCredentials.create(result))
        .withDefaultSubscription()

Does anyone know where to look / or any samples which do this?

If you want to use msal4j library to get access token, then use the token to manage Azure resource with Azure management SDK, please refer to the following code

public class App {
    public static void main(String[] args) throws Exception {
        String subscriptionId = ""; // the subscription id
        String domain="";// Azure AD tenant domain 
        DeviceCodeTokenCredentials tokencred = new DeviceCodeTokenCredentials(AzureEnvironment.AZURE,domain);
         Azure azure =Azure.configure()
                           .withLogLevel(LogLevel.BASIC)
                           .authenticate(tokencred)
                           .withSubscription(subscriptionId);
                                  
         for(AppServicePlan plan : azure.appServices().appServicePlans().list()) {
                  
                  System.out.println(plan.name());
                  
                  }
    }  
}

// define a class to extend AzureTokenCredentials
 class DeviceCodeTokenCredentials extends AzureTokenCredentials{

    public DeviceCodeTokenCredentials(AzureEnvironment environment, String domain) {
        super(environment, domain);
    }

    @Override
    public String getToken(String resource) throws IOException {
        // use msal4j to get access token 
        String clientId="d8aa570a-68b3-4283-adbe-a1ad3c1dfd8d";// you Azure AD application app id
        String AUTHORITY = "https://login.microsoftonline.com/common/";
        Set<String> SCOPE = Collections.singleton("https://management.azure.com/user_impersonation");
        PublicClientApplication pca = PublicClientApplication.builder(clientId)
                .authority(AUTHORITY)
                .build();

        Consumer<DeviceCode> deviceCodeConsumer = (DeviceCode deviceCode) ->
        System.out.println(deviceCode.message());

      DeviceCodeFlowParameters parameters =
        DeviceCodeFlowParameters
                .builder(SCOPE, deviceCodeConsumer)
                .build();
      IAuthenticationResult result = pca.acquireToken(parameters).join();       
      return result.accessToken();
    } 
 }

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM