我喜欢创建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”的类型初始化程序引发了异常。
我做错了什么?
谢谢, 韦斯
答案 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身份验证的更多信息。