Asp.Net读/写到Azure数据湖和Azure SQL Server

时间:2019-01-17 16:40:27

标签: asp.net azure azure-active-directory azure-sql-database azure-data-lake

我喜欢创建Web应用程序以上传文件,保存到Azure数据湖,读/写到Azure SQL Server。

我使用Azure AD clientId /秘密访问数据湖

我的Azure SQL Server连接字符串,例如:Server = tcp:{MyAzureSQLServer} .database.windows.net,1433;初始目录= {MyAzureDatabase};持久安全信息= False; MultipleActiveResultSets = False; Encrypt = True; TrustServerCertificate = False; Authentication =“集成Active Directory”

Asp.Net Mvc Core,数据湖工作正常,但Azure SQL报告:不支持关键字:“身份验证”。

Asp.Net Mvc(框架),Azure SQL可用,但是数据湖报告错误:“ Microsoft.IdentityModel.Clients.ActiveDirectory.TokenCache”的类型初始化程序引发了异常。

我做错了什么?

谢谢, 韦斯

1 个答案:

答案 0 :(得分:0)

使用访问令牌(通过托管身份获得)在.NET Core的SQL客户端中使用Azure Active Directory身份验证。下面您需要包括连接字符串。

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    //code ignored for simplicity
    services.AddDbContext<MyCustomDBContext>();

    services.AddTransient<IDBAuthTokenService, AzureSqlAuthTokenService>();
}

MyCustomDBContext.cs

public partial class MyCustomDBContext : DbContext
{
    public IConfiguration Configuration { get; }
    public IDBAuthTokenService authTokenService { get; set; }

    public CortexContext(IConfiguration configuration, IDBAuthTokenService tokenService, DbContextOptions<MyCustomDBContext> options)
        : base(options)
    {
        Configuration = configuration;
        authTokenService = tokenService;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = Configuration.GetConnectionString("defaultConnection");
        connection.AccessToken = authTokenService.GetToken().Result;

        optionsBuilder.UseSqlServer(connection);
    }
}

AzureSqlAuthTokenService.cs

public class AzureSqlAuthTokenService : IDBAuthTokenService
{
    public async Task<string> GetToken()
    {
        AzureServiceTokenProvider provider = new AzureServiceTokenProvider();
        var token = await provider.GetAccessTokenAsync("https://database.windows.net/");

        return token;
    }
}

有关使用访问令牌here进行AAD身份验证的更多信息。