MATLAB är en programmerings- och numerisk databehandlingsplattform som används för att analysera data, utveckla algoritmer och skapa modeller. Den här artikeln beskriver hur du hämtar en auktoriseringstoken i MATLAB för Azure Data Explorer och hur du använder token för att interagera med klustret.
Förutsättningar
Välj fliken för operativsystemet som används för att köra MATLAB.
Starta om MATLAB IDE. När du har läst in det på nytt kör du start.m-skriptet som är tillgängligt på matlab-azure-services\Software\MATLAB\startup.m. Detta säkerställer att alla nödvändiga funktioner har konfigurerats för åtkomst till Azure-tjänster. Utdata bör se ut så här:
Med användarautentisering uppmanas användaren att logga in via ett webbläsarfönster. Vid lyckad inloggning beviljas en användarauktoriseringstoken. Det här avsnittet visar hur du konfigurerar det här interaktiva inloggningsflödet.
Definiera de konstanter som krävs för auktoriseringen. Mer information om dessa värden finns i Autentiseringsparametrar.
% The Azure Data Explorer cluster URL
clusterUrl = 'https://<adx-cluster>.kusto.windows.net';
% The Azure AD tenant ID
tenantId = '';
% Send a request to https://<adx-cluster>.kusto.windows.net/v1/rest/auth/metadata
% The appId should be the value of KustoClientAppId
appId = '';
% The Azure AD scopes
scopesToUse = strcat(clusterUrl,'/.default ');
Läs in de extraherade DLL-filerna i MATLAB Studio:
% Access the folder that contains the DLL files
dllFolder = fullfile("C:","Matlab","DLL");
% Load the referenced assemblies in the MATLAB session
matlabDllFiles = dir(fullfile(dllFolder,'*.dll'));
for k = 1:length(matlabDllFiles)
baseFileName = matlabDllFiles(k).name;
fullFileName = fullfile(dllFolder,baseFileName);
fprintf(1, 'Reading %s\n', fullFileName);
end
% Load the downloaded assembly in MATLAB
NET.addAssembly(fullFileName);
% Create an PublicClientApplicationBuilder
app = Microsoft.Identity.Client.PublicClientApplicationBuilder.Create(appId)...
.WithAuthority(Microsoft.Identity.Client.AzureCloudInstance.AzurePublic,tenantId)...
.WithRedirectUri('http://localhost:8675')...
.Build();
% System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
NET.setStaticProperty ('System.Net.ServicePointManager.SecurityProtocol',System.Net.SecurityProtocolType.Tls12)
% Start with creating a list of scopes
scopes = NET.createGeneric('System.Collections.Generic.List',{'System.String'});
% Add the actual scopes
scopes.Add(scopesToUse);
fprintf(1, 'Using appScope %s\n', scopesToUse);
% Get the token from the service
% and show the interactive dialog in which the user can login
tokenAcquirer = app.AcquireTokenInteractive(scopes);
result = tokenAcquirer.ExecuteAsync;
% Extract the token and when it expires
% and retrieve the returned token
token = char(result.Result.AccessToken);
fprintf(2, 'User token aquired and will expire at %s & extended expires at %s', result.Result.ExpiresOn.LocalDateTime.ToString,result.Result.ExtendedExpiresOn.ToLocalTime.ToString);
Använd auktoriseringstoken för att fråga klustret via REST-API:et:
options=weboptions('HeaderFields',{'RequestMethod','POST';'Accept' 'application/json';'Authorization' ['Bearer ', token]; 'Content-Type' 'application/json; charset=utf-8'; 'Connection' 'Keep-Alive'; 'x-ms-app' 'Matlab'; 'x-ms-client-request-id' 'Matlab-Query-Request'});
% The DB and KQL variables represent the database and query to execute
querydata = struct('db', "<DB>", 'csl', "<KQL>");
querryresults = webwrite("https://sdktestcluster.westeurope.dev.kusto.windows.net/v2/rest/query", querydata, options);
% Extract the results row
results=querryresults{3}.Rows
Skapa en Auth.json-fil i arbetskatalogen med relevanta autentiseringsuppgifter. KustoClientAppId som returneras från https://<adx-cluster>.kusto.windows.net/v1/rest/auth/metadata måste ersättas med värdet för ClientId nedan:
{
"AuthMethod": "InteractiveBrowser",
"TenantId" : "<AAD Tenant / Authority ID for the login>",
"ClientId" : "<Client ID>",
"RedirectUrl": "http://localhost:8675"
}
Fråga klustret på följande sätt:
% References the credential file created in the previous step
credentials = configureCredentials('Auth.json');
% Point the scopes to the Azure Data Explorer cluster that we want to query
request = azure.core.credential.TokenRequestContext();
request.addScopes('<https://adx-cluster-changeme.kusto.windows.net/.default>');
token=credentials.getToken(request);
% Prepare to query the cluster
options=weboptions('HeaderFields',{'RequestMethod','POST';'Accept' 'application/json';'Authorization' ['Bearer ', token.getToken()]; 'Content-Type' 'application/json; charset=utf-8'; 'Connection' 'Keep-Alive'; 'x-ms-app' 'Matlab'; 'x-ms-client-request-id' 'Matlab-Query-Request'});
% The DB and KQL variables represent the database and query to execute
querydata = struct('db', "<DB>", 'csl', "<KQL>");
querryresults = webwrite('<https://adx-cluster-changeme.kusto.windows.net/v2/rest/query>', querydata, options);
% The results row can be extracted as follows
results=querryresults{3}.Rows
Utföra programautentisering
Microsoft Entra programauktorisering kan användas för scenarier där interaktiv inloggning inte önskas och automatiserade körningar krävs.
Definiera de konstanter som krävs för auktoriseringen. Mer information om dessa värden finns i Autentiseringsparametrar.
% The Azure Data Explorer cluster URL
clusterUrl = 'https://<adx-cluster>.kusto.windows.net';
% The Azure AD tenant ID
tenantId = '';
% The Azure AD application ID and key
appId = '';
appSecret = '';
Läs in de extraherade DLL-filerna i MATLAB Studio:
% Access the folder that contains the DLL files
dllFolder = fullfile("C:","Matlab","DLL");
% Load the referenced assemblies in the MATLAB session
matlabDllFiles = dir(fullfile(dllFolder,'*.dll'));
for k = 1:length(matlabDllFiles)
baseFileName = matlabDllFiles(k).name;
fullFileName = fullfile(dllFolder,baseFileName);
fprintf(1, 'Reading %s\n', fullFileName);
end
% Load the downloaded assembly
NET.addAssembly(fullFileName);
% Create an ConfidentialClientApplicationBuilder
app = Microsoft.Identity.Client.ConfidentialClientApplicationBuilder.Create(appId)...
.WithAuthority(Microsoft.Identity.Client.AzureCloudInstance.AzurePublic,tenantId)...
.WithRedirectUri('http://localhost:8675')...
.WithClientSecret(appSecret)...
.Build();
% System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
NET.setStaticProperty ('System.Net.ServicePointManager.SecurityProtocol',System.Net.SecurityProtocolType.Tls12)
% Start with creating a list of scopes
scopes = NET.createGeneric('System.Collections.Generic.List',{'System.String'});
% Add the actual scopes
scopes.Add(scopesToUse);
fprintf(1, 'Using appScope %s\n', scopesToUse);
% Get the token from the service and cache it until it expires
tokenAcquirer = app.AcquireTokenForClient(scopes);
result = tokenAcquirer.ExecuteAsync;
% Extract the token and when it expires
% retrieve the returned token
token = char(result.Result.AccessToken);
fprintf(2, 'User token aquired and will expire at %s & extended expires at %s', result.Result.ExpiresOn.LocalDateTime.ToString,result.Result.ExtendedExpiresOn.ToLocalTime.ToString);
Använd auktoriseringstoken för att fråga klustret via REST-API:et:
options=weboptions('HeaderFields',{'RequestMethod','POST';'Accept' 'application/json';'Authorization' ['Bearer ', token]; 'Content-Type' 'application/json; charset=utf-8'; 'Connection' 'Keep-Alive'; 'x-ms-app' 'Matlab'; 'x-ms-client-request-id' 'Matlab-Query-Request'});
% The DB and KQL variables represent the database and query to execute
querydata = struct('db', "<DB>", 'csl', "<KQL>");
querryresults = webwrite("https://sdktestcluster.westeurope.dev.kusto.windows.net/v2/rest/query", querydata, options);
% Extract the results row
results=querryresults{3}.Rows
Skapa en Auth.json-fil i arbetskatalogen med relevanta autentiseringsuppgifter:
{
"AuthMethod": "ClientSecret",
"TenantId" : "<AAD Tenant / Authority ID for the login>",
"ClientId" : "<Client ID of the Azure AD application>",
"ClientSecret": "<Client Key of the Azure AD application>",
"RedirectUrl": "http://localhost:8675"
}
Fråga klustret på följande sätt:
% References the credential file created in the previous step
credentials = configureCredentials('Auth.json');
% Point the scopes to the Azure Data Explorer cluster that we want to query
request = azure.core.credential.TokenRequestContext();request.addScopes('<https://adx-cluster-changeme.kusto.windows.net/.default>');
token=credentials.getToken(request);
% Prepare to query the cluster
options=weboptions('HeaderFields',{'RequestMethod','POST';'Accept' 'application/json';'Authorization' ['Bearer ', token.getToken()]; 'Content-Type' 'application/json; charset=utf-8'; 'Connection' 'Keep-Alive'; 'x-ms-app' 'Matlab'; 'x-ms-client-request-id' 'Matlab-Query-Request'});
% The DB and KQL variables represent the database and query to execute
querydata = struct('db', "<DB>", 'csl', "<KQL>");
querryresults = webwrite('<https://adx-cluster-changeme.kusto.windows.net/v2/rest/query>', querydata, options);
% The results row can be extracted as follows
results=querryresults{3}.Rows