首页 > 解决方案 > 用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。- MSI(托管身份)

问题描述

我已按照教程使用托管标识保护来自应用服务的 Azure SQL 数据库连接。

Azure 中的一切都按预期工作,但是当我尝试在本地调试代码时,我在打开连接时收到以下错误消息。

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

我发现很少有参考文献提到我们可以使用“Azure 服务身份验证”扩展在本地进行调试。

在此处输入图像描述

'Azure Service Authentication'我已经在扩展中登录了我的 Azure 帐户。但是,我仍然收到错误消息。

public IActionResult GetData()
{
    var result = "connection opened.";
    var test = config.GetSection("ConnectionStrings")["MyDbConnection"];
    SqlConnection sql = new SqlConnection();
    sql.ConnectionString = test;
    sql.AccessToken = (new AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/").Result; //No issues while fetching the token.

    try
    {
        //Getting exception here when running locally...
        //Same code is working in Azure Webapp.
        sql.Open();
    }
    catch (Exception ex)
    {
        result = $"Error : {ex.Message}";
    }
    finally
    {
        if ( sql != null && sql.State == System.Data.ConnectionState.Open )
        {
            sql.Close();
        }
    }
    return Ok(result);
}

其他详情:

更新 1: 这篇文章讨论connectionString了类的参数AzureServiceTokenProvider。我尝试提供RunAs=Developer; DeveloperTool=VisualStudio价值,connectionString但仍然面临同样的问题。

标签: azureazure-active-directoryazure-sql-databaseazure-web-app-serviceidentity

解决方案


在微软论坛上得到以下答案

你好赫曼特

我可以从屏幕截图中看到您使用 Live ID 登录到 Visual Studio。

租户中创建的数据库是否与工作帐户相关联?

哪个用户在 Azure SQL Server 上设置为 AAD 管理员?

您用于登录 VS 的用户帐户应添加为数据库中的用户,以便身份验证工作。

或者,在您引用的同一篇文章中,有一节讨论了创建 AAD 组并授予适当的权限。

您也可以将您的用户添加到 AAD 组。

如果您还有其他问题,请告诉我们。

由 Kalyan Chanumolu-MSFTMicrosoft 员工、版主提议为回答 2019 年 5 月 22 日星期三凌晨 3:55 Hemant.Shelar 标记为回答 2019 年 5 月 22 日星期三凌晨 4:22 2019 年 5 月 22 日星期三凌晨 3:55

注意:我能够通过创建 AAD 组并授予适当的权限来完成它。

更新 1:

我已按照以下步骤使其工作。让我知道是否存在任何其他可能的解决方案

  1. 创建了一个 AAD 组,例如'hemantdotnetcore1'
  2. 将用户添加到该组(一般这些用户是开发环境中想要在开发过程中访问数据库的开发人员)

在此处输入图像描述

  1. 导航到 SQL 服务器实例并设置“Active Directory 管理员”。在此示例中,我已添加'hemantdotnetcore1'为活动目录管理员。

在此处输入图像描述

  1. 在 Visual Studio 中导航到“Azure 服务身份验证”并使用属于“hemantdotnetcore1”组的任何用户登录,该组是我的 Azure Active Directory 管理员
  2. 现在我可以使用下面的 toke 打开与 SQL Server 的连接。

    sql.AccessToken = (new AzureServiceTokenProvider()).GetAccessTokenAsync(" https://database.windows.net/ ").Result;

在此处输入图像描述


推荐阅读