1

我需要ServicePrincipal使用LinqToDB. 我按照这篇微软文章来测试设置是否正确。但是,此示例使用System.Data.Sqlclient.SqlConnection具有AccessToken属性的类,因此它可以添加AccessToken到连接中。

using (var conn = new SqlConnection(sqlConnectionString))
{
    conn.AccessToken = authenticationResult.AccessToken;
    // ...
}

我正在使用LinqToDB并试图弄清楚我可以在哪里添加AccessTokenAD. ( sourceDataConnection )没有属性。AccessToken

4

1 回答 1

1

如果有人对此感兴趣,这是解决方案。

  1. 创建一个连接工厂类,在连接对象中添加访问令牌,如下所示:

    public IDbConnection MyConnectionFactory()
    {
        ClientCredential clientCredential = new ClientCredential(ClientId,ClientSecret);
        AuthenticationContext authenticationContext = new AuthenticationContext(AuthorityUrl);
        AuthenticationResult authenticationResult = authenticationContext.AcquireTokenAsync(TargetUrl, clientCredential).Result;
        SqlConnection MyDataConnection = new SqlConnection(ConnectionString);
        MyDataConnection.AccessToken = authenticationResult.AccessToken;
    
        return MyDataConnection;
    }
    
  2. 为您的数据库创建一个数据提供者:

        IDataProvider MyDataProvider = new SqlServerDataProvider("SqlServer", SqlServerVersion.v2008);
    
  3. 将这些传递给 DataConnection 的构造函数

using (var db = new DataConnection(MyDataProvider, MyConnectionFactory))

于 2019-07-31T21:09:55.913 回答