我正在尝试从 IIS 上运行的 webapi 服务连接到 Azure SQL。如果我使用带有用户 ID 和密码的连接字符串,它可以正常工作。
当我使用通过将 ClientAssertionCertificate 发送到 Azure AD 生成的访问令牌来使用连接字符串生成器时,我收到上面的连接错误。
当我在控制台应用程序中创建相同的代码并在与 IIS 服务器相同的 VM 上运行它时,它工作正常。
我认为这可能与权限有关,因为它适用于控制台应用程序。我尝试更改 DefaultAppPool 使用的身份,但没有奏效。
string accessToken = TokenFactory.GetAccessToken();
var builder = new SqlConnectionStringBuilder();
builder["Data Source"] = $"tcp:{dbServer}.database.windows.net,1433";
builder["Initial Catalog"] = dbName;
builder["Connect Timeout"] = 30;
builder["Persist Security Info"] = false;
builder["TrustServerCertificate"] = false;
builder["Encrypt"] = true;
builder["MultipleActiveResultSets"] = true;
var con = new SqlConnection(builder.ToString());
con.AccessToken = accessToken;
// attempting to use the con from the SqlConnecti
CompanyService _cs = new CompanyService(con);
var company = _cs.GetCompany(1);
return Request.CreateResponse(HttpStatusCode.OK, new { teststring = accessToken } );