mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-24 17:24:14 -05:00
dSTS Authentication (#1125)
* Refactored Kusto.ServiceLayer to pass ConnectionDetails to DataSourceFactory instead of connection string. Created KustoConnectionDetails to map needed details to KustoClient. * Removed unused ScriptingScriptOperation from KustoServiceLayer. * Created DstsAuthenticationManager and moved logic for getting DstsToken. Updated error message for failing to create KustoConnection. * Removed DstsAuthenticationManager.cs. Refactored DataSourceFactory to retrieve UserToken from ConnectionDetails. * Renamed AzureAccountToken in ConnectionDetails to AccountToken. Changed mapping to KustoConnectionDetails based on the AccountToken. * Removed Kusto.Data reference from ConnectionService and ScriptingListObjectsOperation. Moved creation of KustoConnectionStringBuilder to DataSourceFactory * Added accountToken validation to DataSourceFactory Create. * Renamed KustoConnectionDetails to DataSourceConnectionDetails. Renamed AzureToken to AuthToken.
This commit is contained in:
@@ -19,7 +19,6 @@ using Microsoft.Kusto.ServiceLayer.LanguageServices.Contracts;
|
||||
using Microsoft.Kusto.ServiceLayer.Utility;
|
||||
using Microsoft.SqlTools.Utility;
|
||||
using System.Diagnostics;
|
||||
using Kusto.Data;
|
||||
using Microsoft.Kusto.ServiceLayer.DataSource;
|
||||
using Microsoft.Kusto.ServiceLayer.DataSource.Metadata;
|
||||
using Microsoft.SqlTools.ServiceLayer.Connection.ReliableConnection;
|
||||
@@ -280,7 +279,7 @@ namespace Microsoft.Kusto.ServiceLayer.Connection
|
||||
};
|
||||
|
||||
var response = Instance.ServiceHost.SendRequest(SecurityTokenRequest.Type, requestMessage, true).Result;
|
||||
connection.UpdateAzureToken(response.Token);
|
||||
connection.UpdateAuthToken(response.Token);
|
||||
|
||||
return response.Token;
|
||||
}
|
||||
@@ -389,12 +388,13 @@ namespace Microsoft.Kusto.ServiceLayer.Connection
|
||||
if (!string.IsNullOrEmpty(connectionInfo.ConnectionDetails.ConnectionString))
|
||||
{
|
||||
// If the connection was set up with a connection string, use the connection string to get the details
|
||||
var connectionString = new KustoConnectionStringBuilder(connection.ConnectionString);
|
||||
var connectionStringBuilder = DataSourceFactory.CreateConnectionStringBuilder(DataSourceType.Kusto, connection.ConnectionString);
|
||||
|
||||
response.ConnectionSummary = new ConnectionSummary
|
||||
{
|
||||
ServerName = connectionString.DataSource,
|
||||
DatabaseName = connectionString.InitialCatalog,
|
||||
UserName = connectionString.UserID
|
||||
ServerName = connectionStringBuilder.DataSource,
|
||||
DatabaseName = connectionStringBuilder.InitialCatalog,
|
||||
UserName = connectionStringBuilder.UserID
|
||||
};
|
||||
}
|
||||
else
|
||||
@@ -446,11 +446,9 @@ namespace Microsoft.Kusto.ServiceLayer.Connection
|
||||
try
|
||||
{
|
||||
connectionInfo.ConnectionDetails.Pooling = false;
|
||||
// build the connection string from the input parameters
|
||||
string connectionString = BuildConnectionString(connectionInfo.ConnectionDetails);
|
||||
|
||||
// create a sql connection instance
|
||||
connection = connectionInfo.Factory.CreateDataSourceConnection(connectionString, connectionInfo.ConnectionDetails.AzureAccountToken, connectionInfo.OwnerUri);
|
||||
// create a data source connection instance
|
||||
connection = connectionInfo.Factory.CreateDataSourceConnection(connectionInfo.ConnectionDetails, connectionInfo.OwnerUri);
|
||||
connectionInfo.AddConnection(connectionParams.Type, connection);
|
||||
|
||||
// Add a cancellation token source so that the connection OpenAsync() can be cancelled
|
||||
@@ -955,28 +953,6 @@ namespace Microsoft.Kusto.ServiceLayer.Connection
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build a connection string from a connection details instance
|
||||
/// </summary>
|
||||
/// <param name="connectionDetails"></param>
|
||||
public static string BuildConnectionString(ConnectionDetails connectionDetails)
|
||||
{
|
||||
return CreateConnectionStringBuilder(connectionDetails).ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build a connection string builder a connection details instance
|
||||
/// </summary>
|
||||
/// <param name="connectionDetails"></param>
|
||||
private static KustoConnectionStringBuilder CreateConnectionStringBuilder(ConnectionDetails connectionDetails)
|
||||
{
|
||||
var stringBuilder = string.IsNullOrWhiteSpace(connectionDetails.ConnectionString)
|
||||
? new KustoConnectionStringBuilder(connectionDetails.ServerName, connectionDetails.DatabaseName)
|
||||
: new KustoConnectionStringBuilder(connectionDetails.ConnectionString);
|
||||
|
||||
return stringBuilder.WithAadUserTokenAuthentication(connectionDetails.AzureAccountToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles a request to get a connection string for the provided connection
|
||||
/// </summary>
|
||||
@@ -997,9 +973,9 @@ namespace Microsoft.Kusto.ServiceLayer.Connection
|
||||
info.ConnectionDetails.Password = ConnectionService.PasswordPlaceholder;
|
||||
}
|
||||
|
||||
info.ConnectionDetails.ApplicationName = "sqlops-connection-string";
|
||||
|
||||
connectionString = BuildConnectionString(info.ConnectionDetails);
|
||||
info.ConnectionDetails.ApplicationName = "ads-connection-string";
|
||||
connectionString = DataSourceFactory.CreateConnectionStringBuilder(DataSourceType.Kusto,
|
||||
info.ConnectionDetails.ServerName, info.ConnectionDetails.DatabaseName).ToString();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -1035,7 +1011,7 @@ namespace Microsoft.Kusto.ServiceLayer.Connection
|
||||
|
||||
public ConnectionDetails ParseConnectionString(string connectionString)
|
||||
{
|
||||
var builder = new KustoConnectionStringBuilder(connectionString);
|
||||
var builder = DataSourceFactory.CreateConnectionStringBuilder(DataSourceType.Kusto, connectionString);
|
||||
return new ConnectionDetails
|
||||
{
|
||||
ApplicationName = builder.ApplicationNameForTracing,
|
||||
@@ -1082,10 +1058,8 @@ namespace Microsoft.Kusto.ServiceLayer.Connection
|
||||
conn.Dispose();
|
||||
info.RemoveConnection(key);
|
||||
|
||||
string connectionString = BuildConnectionString(info.ConnectionDetails);
|
||||
|
||||
// create a sql connection instance
|
||||
ReliableDataSourceConnection connection = info.Factory.CreateDataSourceConnection(connectionString, info.ConnectionDetails.AzureAccountToken, ownerUri);
|
||||
// create a kusto connection instance
|
||||
ReliableDataSourceConnection connection = info.Factory.CreateDataSourceConnection(info.ConnectionDetails, ownerUri);
|
||||
connection.Open();
|
||||
info.AddConnection(key, connection);
|
||||
}
|
||||
@@ -1094,7 +1068,6 @@ namespace Microsoft.Kusto.ServiceLayer.Connection
|
||||
conn.ChangeDatabase(newDatabaseName);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Fire a connection changed event
|
||||
|
||||
Reference in New Issue
Block a user