- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个预算应用程序,该应用程序使用一组 token 和 key 来访问外部金融服务,其中 token - key 对映射到单个帐户。在该系统中,用户可以拥有多个帐户,因此可以拥有多组 token - secret 对。 token 和 secret 可用于访问帐户的交易,这意味着 token - secret 对应安全存储(并防止恶意访问或篡改)。尽管这些对应该安全存储,但外部金融服务 API 需要明文形式的 token 和 secret 。
什么是静态存储这些凭据并向外部服务 API 提供原始明文凭据的安全技术?
我的应用程序是一个用 Java 9+ 编写的基于 REST 的 Spring Boot 应用程序。尽管我在这个主题上看到过其他答案,但其中许多都是特定于 Android 的,并使用 Android 安全技术(因此不适用于我的应用程序)。该应用程序还使用 Spring Data MonogDB 来存储其他非敏感信息,但如果需要其他技术来满足上述安全要求,我愿意接受建议。
最佳答案
这不是 Java 内部可以解决的问题。
The token and secret can be used to access the transactions for an account, which means that the token-secret pairs should be securely stored (and be guarded against nefarious access or tampering).
根本问题是你要针对谁来确保这一点:
如果您试图保护平台免受管理平台人员的攻击,那么这几乎是无法解决的1。
如果您试图保护它免受“普通”(即非特权)用户的攻击,那么您可以依靠普通文件系统安全性(加上标准服务“强化”),或者您可以使用类似的东西一个Spring Vault或 Hardware Security Module如果本地文件系统安全性不足2。
如果您试图防范可能获得完全管理员权限的黑客,这可能也是无法解决的。 (尽管黑客可能需要很老练......)
请注意,您可以执行诸如将 secret 保存在 Java keystore 中之类的操作,但为了执行此操作,JVM 需要 keystore 的 secret key 才能获取 secret 。您将这个 secret 存储在哪里?
<小时/>旁白:
... many of them are specific to Android and use Android security techniques (as are thus not applicable to my application).
这些技术通常假设平台本身是安全的,和/或它尚未被用户“root”。
<小时/>1 - 因此,如果您的目标是在提供给客户使用的应用程序中嵌入一些 secret ……放弃。如果这个问题能够解决,那么软件、音乐、视频等的盗版问题就会有一个简单而可靠的技术解决方案。显然……事实并非如此。
2 - 对于很多目的来说,这还不够。但是,决策应基于风险评估,并平衡风险与安全失败后果的成本/严重性。
关于java - 如何安全地存储外部服务的凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548162/
我有一个问题,我不断收到错误 没有为“svn.ssl.server”凭据注册的提供者 我正在使用在另一台 SVN 服务器上工作的相同代码,但我设置的新服务器似乎无法连接,即使我可以通过 Web 浏览器
如何通过 shell 在 Hudson 中输入 subversion 凭据? 我尝试在 HUDSON_HOME 中生成文件 hudson.scm.SubversionSCM.xml 并重新加载配置,但
我正在尝试使用 powershell 访问远程注册表,如下所示: $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachi
我需要将凭据存储在 powershell 中以便多次使用。 StackOverflow 上有很多例子,所以我拿了一个 $tmpCred = Get-Credential $tmpCred.Passwo
我遇到了 youtube java 凭据的问题,通常它运行良好并且我能够上传到 youtube,但今天我收到此异常无效的凭据。 YouTubeService service = new YouTube
我正在阅读中提供的 Hadoop 凭证文档 https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Crede
我想知道在为 MySQL 凭据/主机创建变量时最佳做法或建议做什么。 define('HOST', 'localhost'); // etc.. mysql_connect(HO
我试图让 Jenkins 从 BitBucket 克隆我的 mercurial 项目。它不会,因为它说凭据有问题 - 好吧,bitbucket 拒绝 Jenkins 提供的任何内容。 我几乎 100%
这里有一百万篇关于如何使用 git 缓存凭据的帖子。但是,如果机器重新启动,它们似乎都不成立。有没有办法缓存在机器重新启动时持续的凭据? 最佳答案 是的,在 Debian 和 Ubuntu 上,您可以
我正在尝试在我的环境中为 IIS 节点使用共享配置,我想使用组托管服务帐户凭据来实现这一目标。 当我将应用程序池的凭据应用为 MyDomain\GmsaAccount$ 时,它运行良好,但是当我尝试在
我创建了一个应用程序,它充当 2 个不同 API(WebEx 和 Exchange Web 服务)和电子邮件之间的桥梁。用户向一个特殊的电子邮件地址发送日历邀请,该应用程序解析 ICS 并创建一个 W
我正在尝试将凭据从 Jenkins 迁移到另一个凭据存储。 我想从 Jenkins 商店读取凭据,并找到了这个脚本 ( https://github.com/tkrzeminski/jenkins-g
我有一个在 Windows 上运行的 Jenkins 服务器。它将用户名:密码存储在凭据插件中。这是一个定期更新密码的服务用户。 我正在寻找一种运行脚本的方法,最好是 Powershell,它将更新
我想知道如何创建 Jenkins 和 Jenkins 中运行的作业可以使用的凭据以连接到 3rd 方服务。 最佳答案 您应该指定您将使用的第 3 方服务。 以下是带有 的凭据示例bitbucket 我
我正在一个网站上工作,我们希望使用 Spring Security Kerberos 使用 Kerberos 身份验证。所以,我们不支持 NTLM。当用户发出未经身份验证的请求时,服务器将回复带有 h
如果我设置 git config --global credential.username my_username 选项,然后使用 --local 选项覆盖一个存储库,这并没有什么区别 - 它在尝试提
我正在尝试使用需要 gce_client_id 和 gce_client_secret key 的第 3 方应用程序。为了生成它们,我浏览了凭据图标并尝试创建一个 OAuth 2.0 客户端 ID。但
我在使用 Azure 时遇到身份验证问题。我有一个运行 powershell 脚本的连续构建服务器,我收到如下消息: Your Azure credentials have not been set
首先,我想说我在安全和身份验证方面的知识非常有限。 我有一个应用程序可以从 docker store 中提取和运行容器。这是一个私有(private)仓库,所以我需要传递用户名和密码,以便用户可以拉取
我使用 Google 文档中的代码(如下所示)来管理 Google 日历。 public class CalendarQuickstart { private static final Str
我是一名优秀的程序员,十分优秀!