【问题标题】:Best way to save authentication token?保存身份验证令牌的最佳方法?
【发布时间】:2012-02-09 15:31:47
【问题描述】:

我一直致力于在 c# 中实现一个 api。实施进展顺利,但我确实遇到了一个问题。

当我的图书馆对 api 进行授权时,我有一个 auth_token,用于对 web 服务进行后续查询。

令牌需要在程序运行之间保留,因为它对用户保持不变(尽管我确实在应用程序启动时检查它是否仍然有效)。

出于测试目的,我基本上只是将令牌保存到一个文本文件中,该文件保存在应用程序的根目录中。

这很好用,但这是最好的方法吗?

不确定用户是否会喜欢它被保存在明文文件中(即使它在他自己的电脑上)。

那么,像这样保存令牌的一般做法是什么?

【问题讨论】:

  • 加密该值,然后将其保存到用户配置文件中,然后我还将加密整个配置文件,使其对机器本身来说是唯一的。请不要以纯文本形式存储此类信息,您有权质疑这是否是一个“好主意”,因为它不是。
  • 段落是你的朋友。使用它们。

标签: c# security token


【解决方案1】:

我会使用Windows Data Protection 有很多examples 关于如何从C# 中使用它。它使用用户特定的密钥来加密数据。只有用户自己才能解密。还要确保在服务器和客户端之间传输期间的数据安全。

【讨论】:

  • Windows数据保护API即使保存在配置文件、数据库、注册表等中也可以使用
  • 示例链接似乎已失效。如果有错别字或其他参考,也许会更新它?
【解决方案2】:

在项目属性中为您的项目创建一个设置文件,将AuthToken 属性添加到已知设置(可能在用户级别),然后使用:

Properties.Settings.Default.AuthToken = userAuthToken;

如果您认为他们希望将其隐藏,请加密或编码 userAuthToken,使其不那么明显。

【讨论】:

    【解决方案3】:

    您可以验证该api是否在asp.net或windows环境下使用(检查Request是否为空就足够了),在第一种情况下使用cookie,在后者将其保存在注册表项中。

    【讨论】:

      【解决方案4】:

      这可能适用于本地应用程序或在本地运行 CI,但如果您在 DevOps (Azure) 中,您的测试应用程序将驻留在您的 VM bin 文件夹中。每次部署后,您的 bin 文件夹都会被清除,因此您保存在 bin 文件中的令牌就消失了。也许保存它的最佳方法是在发布管道中的 DevOps 环境变量之一中加密,这样您就不会丢失它。在本地运行时,您可以将其保存在任何地方。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-05
        • 2018-01-05
        • 2018-08-07
        • 1970-01-01
        • 1970-01-01
        • 2018-08-03
        相关资源
        最近更新 更多