Как преобразовать этот код в scala (используя adal для создания токена Azure AD)

#scala #apache-spark #azure-active-directory #adal

Вопрос:

В настоящее время я работаю над кодом Scala, который может установить соединение с базой данных SQL server с помощью токена AD.

В Интернете слишком мало документации на эту тему, поэтому я пытаюсь работать над ней с помощью python. Теперь это работает, я хочу преобразовать свой код в Scala.

Вот скрипт на python:

 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()
 

Ответ №1:

Вот код Java, который вы можете использовать в качестве основы, используя функцию AcquireToken:

 import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResu<
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. Но на самом деле использование ADAL больше не рекомендуется, вместо этого лучше использовать MSAL (вот руководство по миграции)

Комментарии:

1. Как я могу использовать результат, пожалуйста ? Я сделал println(результат) и получил com.microsoft.aad.adal4j. AuthenticationResult@c65a3855 Как я могу на самом деле использовать токен ?

2. позвольте мне обновить ответ. Вы получаете токен как result.getAccessToken()