【问题标题】:Using username and password safely in Python code在 Python 代码中安全地使用用户名和密码
【发布时间】:2018-09-29 06:24:11
【问题描述】:

我正在使用 Python 请求库来调用需要 Windows 身份验证的 API。在 C# 中,我一直使用目录服务,这使我能够避免在我的任何代码或配置中输入密码。从我在网上找到的信息来看,我在 Python 中的唯一选择似乎是在某个地方设置密码。我有一个要使用的服务帐户,但我需要安全地存储密码。在 Python 中安全存储和检索服务帐户密码而不用硬编码纯文本的最佳方法是什么?

我目前使用的代码如下。我的配置中以纯文本形式存储了用户名和密码:

auth = HttpNtlmAuth(
    config.ServiceAccount["Username"], 
    config.ServiceAccount["Password"]
    )

content = requests.post(call_string, json=parameters, auth=auth)

编辑:我应该提到这将不是一个面向用户的应用程序。它将作为批处理作业运行。因此,用户在运行应用程序时将无法输入用户名/密码。

【问题讨论】:

  • 我对 Windows 编程了解不多,但为什么不能使用目录服务?您使用哪种语言并不重要,如果它是系统可用的服务,您应该能够访问它。它是 Active Directory 的一部分吗?有各种包可以与之交互。
  • @Kevin K,请参考这个stackoverflow.com/questions/7014953/…,希望对你有帮助。

标签: python security python-requests windows-authentication password-protection


【解决方案1】:

你可以根本不存储密码并要求用户在运行时提供密码

import getpass
user = getpass.getuser()
password = getpass.getpass()

否则,您可以执行类似于 git 的操作,只需让用户将其密码以明文形式存储在其主目录中的配置文件中,然后您可以在运行时读取该文件。

【讨论】:

  • 此应用程序将作为批处理运行,因此用户没有机会输入他们的凭据。
【解决方案2】:

我知道我不久前问过这个问题,但我找到了一个更好的 NTLM/Windows 身份验证解决方案。我使用requests_negotiate_sspi 库来避免任何密码:

from requests_negotiate_sspi import HttpNegotiateAuth
auth = HttpNegotiateAuth()

content = requests.post(call_string, json=parameters, auth=auth)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2012-05-15
    • 2014-04-05
    • 2016-02-03
    • 1970-01-01
    相关资源
    最近更新 更多