C# 中的 Azure 托管服务标识连接到 Azure SQL 服务器
Azure Managed Service Identity in C# to connect to Azure SQL Server
我正在 运行 编写一个关于如何设置对 Azure 的 MSI 访问的 Microsoft 文档教程 SQL。本文:
https://docs.microsoft.com/en-gb/azure/app-service/app-service-web-tutorial-connect-msi
我成功地从我的 Azure Web 配置管理器中获取了连接字符串
public MyDatabaseContext(SqlConnection conn) : base(conn, true)
{
conn.ConnectionString = WebConfigurationManager.ConnectionStrings["dbConnectionName"].ConnectionString;
// DataSource != LocalDB means app is running in Azure with the SQLDB connection string you configured
if (conn.DataSource != "(localdb)\MSSQLLocalDB")
conn.AccessToken = (new AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/").Result;
Database.SetInitializer<MyDatabaseContext>(null);
}
我在我的控制器中使用
private MyDatabaseContext db = new MyDatabaseContext(new SqlConnection());
当我终于 运行 来电时,例如:
var sample = (from c in _context.Customer where c.Abbreviation == abbrev.Trim() select c).FirstOrDefault();
我收到一个错误 System.Data.Entity.Core.EntityException: 'The underlying provider failed on Open.' "SqlException: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'."
即使我这样做也会发生这种情况 (https://docs.microsoft.com/en-gb/azure/app-service/app-service-managed-service-identity#obtaining-tokens-for-azure-resources)
using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
// ...
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await
azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
// OR
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
并在我的 SqlConnection 中填充正确的访问令牌。
如有任何帮助,我们将不胜感激
对于任何感兴趣的人,我认为这个问题是延迟。
曾经我运行;
az webapp identity poweshell command
并添加了一个连接字符串;
az webapp config connection-string set
有效,但需要一些时间
我正在 运行 编写一个关于如何设置对 Azure 的 MSI 访问的 Microsoft 文档教程 SQL。本文: https://docs.microsoft.com/en-gb/azure/app-service/app-service-web-tutorial-connect-msi
我成功地从我的 Azure Web 配置管理器中获取了连接字符串
public MyDatabaseContext(SqlConnection conn) : base(conn, true)
{
conn.ConnectionString = WebConfigurationManager.ConnectionStrings["dbConnectionName"].ConnectionString;
// DataSource != LocalDB means app is running in Azure with the SQLDB connection string you configured
if (conn.DataSource != "(localdb)\MSSQLLocalDB")
conn.AccessToken = (new AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/").Result;
Database.SetInitializer<MyDatabaseContext>(null);
}
我在我的控制器中使用
private MyDatabaseContext db = new MyDatabaseContext(new SqlConnection());
当我终于 运行 来电时,例如:
var sample = (from c in _context.Customer where c.Abbreviation == abbrev.Trim() select c).FirstOrDefault();
我收到一个错误 System.Data.Entity.Core.EntityException: 'The underlying provider failed on Open.' "SqlException: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'."
即使我这样做也会发生这种情况 (https://docs.microsoft.com/en-gb/azure/app-service/app-service-managed-service-identity#obtaining-tokens-for-azure-resources)
using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
// ...
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await
azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
// OR
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
并在我的 SqlConnection 中填充正确的访问令牌。
如有任何帮助,我们将不胜感激
对于任何感兴趣的人,我认为这个问题是延迟。
曾经我运行;
az webapp identity poweshell command
并添加了一个连接字符串;
az webapp config connection-string set
有效,但需要一些时间