【问题标题】:Integrated Authentication From VM-based AD into Azure SQL DB从基于 VM 的 AD 到 Azure SQL DB 的集成身份验证
【发布时间】:2019-04-15 15:17:18
【问题描述】:

我正在寻找一些关于我正在尝试解决的问题的指导。现在,我们的 web.config 连接字符串包含纯文本密码和用户名。由于合规性原因,我们必须删除那些纯文本凭据并用集成身份验证替换它们。过去,这是通过将纯文本凭据替换为“trusted_connection=yes”来完成的。

进一步说明我们的设置 - 我们正在迁移到 Azure。设置如下所示:我们有一对运行 Active Directory 的 VM,我们的 Web VM 运行标准 IIS,并且正在与 Azure SQL DB 通信。不幸的是,我们无法迁移到 Azure AD,因为我们还有其他要求需要保留它。任何帮助或想法将不胜感激。提前谢谢!

tl;dr - 在具有基于 VM 的 AD 和 Azure SQL DB 的环境中,我们如何从 web.config 文件中获取纯文本凭据。

  • Web.config 文件位于运行 IIS 的 Windows Server 2016 上
  • AD 在一对 2016 虚拟机上
  • Azure SQL DB 是 PaaS

Web.config:

<add key="Persist Security Info=False;User ID=XXXXX;Password=XXXXXX;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" />

<add key="Persist Security Info=False;trusted_connection=yes;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" />

【问题讨论】:

    标签: azure active-directory azure-active-directory azure-sql-database windows-authentication


    【解决方案1】:

    在具有基于 VM 的 AD 和 Azure SQL DB 的环境中,我们如何从 web.config 文件中获取纯文本凭据。

    在 Azure 中执行此操作的正确方法是为您的 VM 配置 Managed Service Identity,并使用该身份获取 SQL Server 的访问令牌。你可以按照教程here.

    在这种情况下,您的连接字符串不需要任何安全信息。就像这样:

    "Data Source = someInstance.database.windows.net; Initial Catalog = someDatabase;Connection Timeout=30;" 
    

    或者,您可以使用 MSI 访问 Azure Key Vault 并检索 SQL Auth 凭据以进行连接,而不是将它们存储在配置文件中,按照教程 here

    您还可以尝试将您的应用程序池配置为在为Seamless Signon with AAD 配置的域帐户下运行,就像 在登录时应该访问 Azure SQL 数据库一样加入域的工作站。但这条道路有很多潜在的复杂性。

    【讨论】:

    • 非常感谢您提供答案,大卫!实际上,我确实通读了该教程,并且实际上已经将 VM 和 DB 都配置为接受托管身份。我也可以使用访问令牌从 VM 连接到数据库,但问题在于我们无法让 web.config 使用我配置的 ID 进行无缝身份验证。换句话说,是否可以使用 MSI 方法在 web.config 文件中进行无缝身份验证?
    • 以上的继续 - 由于我们正在迁移到 Azure,我们已经为网站准备了所有代码。设置 MSI 后,我不知道 IIS 中的应用程序池需要更改哪些内容,以及我们的 web.config 文件中的连接字符串应如何更改才能以集成方式进行身份验证。
    • 不幸的是,如果不更改代码,就无法使用访问令牌。任何调用 SqlConnection.Open() 的地方,首先必须设置 SqlConnection.AccessToken 属性。
    • 再次感谢大卫。如果我要使用访问令牌方法,您是否碰巧知道我可以遵循的一个很好的参考资料来了解 web.config 所需的更改?
    • 我想我已经接近了,但与数据库通信的网页仍然存在问题。我输入了您提供的连接字符串并添加了特定于我的环境的值,但与后端数据库的通信失败。我收到了Exception Details: System.Data.SqlClient.SqlException: Login failed for user ''. 应用程序池是否也需要更改?
    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 2020-07-12
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多