用户“ NT AUTHORITY \ ANONYMOUS LOGON”的登录失败。 -MSI(托管身份)

时间:2019-05-21 12:40:56

标签: azure azure-active-directory azure-sql-database azure-web-sites identity

我已按照this教程使用托管身份从App Service保护Azure SQL数据库连接。

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

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

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

enter image description here

我已经以'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);
}

其他详细信息:

  • Visual Studio 2019社区-版本16.1.0预览版3.0
  • .NET Core 2.2

更新1: This发表关于connectionString类的AzureServiceTokenProvider参数的讨论。我尝试为RunAs=Developer; DeveloperTool=VisualStudio提供connectionString的值,但仍然面临相同的问题。

1 个答案:

答案 0 :(得分:0)

Microsoft forum上获得以下答案

Hello Hemant

从屏幕快照中可以看到,您使用实时ID登录到Visual Studio。

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

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

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

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

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

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

由Kalyan Chanumolu-MSFT建议作为答案微软员工,主持人2019年5月22日星期三3:55 Hemant标记为回答Shelar 2019年5月22日星期三4:22 AM 2019年5月22日,星期三,凌晨3:55

注意:我可以通过创建AAD组并授予适当的权限来完成此操作。

更新1:

我已按照以下步骤操作。让我知道是否还有其他可能的解决方案

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

enter image description here

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

enter image description here

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

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

enter image description here