Search code examples
scalaapache-sparkazure-active-directoryadal

How to convert this code to scala (using adal to generate Azure AD token)


I am currently working on a Scala code that can establish a connection to an SQL server database using AD token.

There are too little documentation on the subject online so I tries to work on it using python. Now it is working, I am looking to convert my code to Scala.

Here is the python script:

context = adal.AuthenticationContext(AUTHORITY_URL)
token = context.acquire_token_with_client_credentials("https://database.windows.net/", CLIENT_ID, CLIENT_SECRET)
access_token = token["accessToken"]

df= spark.read \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .option("url", URL) \
        .option("dbtable", "tab1") \
        .option("accessToken", access_token) \
        .option("hostNameInCertificate", "*.database.windows.net") \
        .load()

df.show()

Solution

  • Here is the Java code that you can use as a base, using the acquireToken function:

    import com.microsoft.aad.adal4j.AuthenticationContext;
    import com.microsoft.aad.adal4j.AuthenticationResult;
    import com.microsoft.aad.adal4j.ClientCredential;
    
    ...
    
    String authority = "https://login.microsoftonline.com/<org-uuid>";
    ExecutorService service = Executors.newFixedThreadPool(1);
    AuthenticationContext context = new AuthenticationContext(authority, true, service);
    ClientCredential credential = new ClientCredential("sp-client-id", "sp-client-secret");
    AuthenticationResult result = context.acquireToken("resource_id", credential, null).get();
    // get token
    String token = result.getAccessToken()
    

    P.S. But really, ADAL's usage isn't recommended anymore, it's better to use MSAL instead (here is the migration guide)