Azure SQL への MSI アクセスを設定する方法について、1 つの Microsoft ドキュメント チュートリアルを実行しています。この記事: 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: '基になるプロバイダーが Open で失敗しました' というエラーが表示されます。「SqlException: ユーザー '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 に適切なアクセス トークンを設定します。
どんな助けでもいただければ幸いです