出于多种原因,使用用户名/密码凭据从一个应用程序访问另一个应用程序存在巨大的安全风险。今天,我们宣布为 Java 应用程序连接 Azure 数据库和事件服务提供无密码连接的预览版,让您最终可以摆脱使用密码。
密码的安全挑战
应谨慎使用密码,并且开发人员绝不能将密码放置在不安全的位置。许多 Java 应用程序通过用户名和密码(或其他敏感凭据,如访问令牌或连接字符串)连接到后端数据、缓存、消息和事件服务。如果暴露,密码可能被用来未经授权地访问敏感信息,例如您为即将进行的活动构建的销售目录,或者仅仅是所有必须保密的客户数据。
将密码嵌入应用程序本身存在巨大的安全风险,原因有很多,包括在代码存储库中被发现(见下图 1)。许多开发人员将此类密码外部化,使用环境变量,以便应用程序可以从不同环境中加载它们。然而,这只是将风险从代码本身转移到了执行环境。任何获得环境访问权限的人都可以窃取密码,进而增加数据泄露的风险。
图 1 – 显示了带有嵌入式用户名和密码以连接到数据库的 Java 代码
我们的客户可能有严格的安全要求,以便在不向开发人员、操作员或任何其他人公开密码的情况下连接到 Azure 服务。他们通常使用密钥库来存储和加载密码到应用程序中,并通过添加密码轮换要求和程序来进一步降低风险。这反过来又增加了操作复杂性,并可能导致应用程序连接中断。
无密码连接 – 零信任
现在,您可以在应用程序中使用无密码连接,通过零配置的方式连接到基于 Azure 的服务。您不再需要轮换密码。利用“永不信任,始终验证,无凭据”的原则,零信任通过在授予对后端服务的访问权限之前验证身份来保护所有通信。
“每一个密码和每一个 Key Vault 都是潜在的风险,这增加了额外的管理开销和成本。我一直很高兴看到更多的身份验证和授权功能得到处理,并作为简单的集成被推送到 Azure 上的 Java 和 Spring 生态系统中。当我删除我们的 Key Vault 时,我不会流一滴眼泪,因为现在 PostgreSQL 支持无密码连接。”
- Jonathan Jones,首席解决方案架构师,Swiss Re Management Ltd. (瑞士)
使用托管标识和 Azure RBAC(基于角色的访问控制)组合是 Java 应用程序安全无密码连接到 Azure 服务的推荐身份验证选项。开发人员或操作员不需要手动跟踪和管理许多不同的托管标识秘密,因为这些任务由 Azure 在内部安全地处理。
您可以使用 Service Connector(见下图 2)将无密码连接配置到 Azure 服务,也可以手动配置。Service Connector 支持 Azure Spring Apps、App Service 和 Azure Container Apps 等托管服务中的托管标识。它使用托管标识和 Azure RBAC 配置后端服务,提供应用程序所需的连接信息 – 无需再处理密码。

图 2 – Service Connector 为 Java 应用连接 PostgreSQL 数据库配置无密码连接
如果您检查已配置为无密码连接的应用程序的运行环境,您可以看到完整的连接字符串。例如,图 3 显示了它如何包含数据库服务器地址、数据库名称以及委托身份验证给 Microsoft Azure 的 JDBC 身份验证插件的指令。

图 3 – datasource 配置“spring.datasource.url”显示无密码连接
让我们考虑一个连接到使用 Spring Cloud Azure starter 的 PostgreSQL 数据库的 Spring Boot 应用程序。该 starter 为 Spring Data JPA 模块组合了一个不带密码的连接字符串。从连接字符串中,驱动程序会明白它必须加载 Azure 的 JDBC 身份验证插件,该插件使用 Azure Identity Client Library 获取访问令牌。驱动程序使用令牌作为密码登录数据库 – 无需再用密码。
对于本地开发和测试,开发人员可以使用相同的安排连接到服务而不使用密码。您将通过 Azure CLI、IntelliJ 或任何开发工具进行身份验证,并使用该身份来保护应用程序与 Azure 服务无密码连接的访问。
了解更多并删除密码!
您可以在应用程序中摆脱使用密码。立即将现有 Java 应用程序迁移到使用 Azure 服务的无密码连接!
阅读更多关于无密码连接的信息 – https://aka.ms/Delete-Passwords
资源
<tbody>
<tr>
<td>Azure Service</td>
<td>Java Quickstart</td>
<td>Spring Quickstart</td>
<td>Migration Guide</td>
</tr>
<tr>
<td> Azure Database for MySQL</td>
<td>
<a href="https://learn.microsoft.com/en-us/azure/mysql/single-server/connect-java?toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json&tabs=passwordless">JDBC</a>
</td>
<td>
<div><a href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-data-jdbc-with-azure-mysql?tabs…
大家好,Spring 粉丝们!又到了一期“本周 Spring”!
已经是九月的最后一周了!一年过半已是过去式。白天越来越短,越来越冷。南瓜香料拿铁也随之而来。天色渐暗,寒意渐浓,这着实让人扫兴,但我仍然对一年中的这个时候感到兴奋和欣喜。您知道为什么吗?
SpringOne 2022 很快就要到了!我觉得现在是某个重要节日(您会收到礼物!)之前的那个充满期待和兴奋的时刻!伴随而来的还有 Spring Boot 3 和 Spring Framework 6。我们当然会在 Spring 博客上宣布一切,但如果您想有机会从源头学习,那么我希望您能于 2022 年 12 月 6 日至 8 日加入我们,就在我的家乡旧金山,我最喜欢的美国西海岸城市,也是我的家乡。(嘘:如果您现在注册,使用此代码 S1VM22_Advocate_200 可享受 $200 的通行证价格折扣……
我花了很长时间才认识到并理解,在软件开发方面,细节决定成败。编写“happy path”业务逻辑并不是难点!难点在于故障场景、可观测性、韧性以及流程。还有安全和其他所谓的非功能性需求。以及架构设计上的敏捷性。还有生产环境。Spring之所以独特,是因为它处于许多激动人心的应用程序开发讨论的交汇点。
Spring 的社区包含了海量的优秀人才,这是其关键的定义特征之一。这种讨论的多样性意味着任何致力于涵盖所有想法的会议都面临着艰巨的任务。在我一生中参加过数千场会议和活动中,我不知道还有哪场展会能像 SpringOne 一样全面覆盖应用程序开发的各个维度……
大家好,Spring 爱好者!在本期节目中,Josh Long (@starbuxman) 与他的朋友、Java 冠军和 Couchbase 的开发者关系与战略总监 Laurent Doguin (@ldoguin) 进行了交谈。
SpringOne 2022 很快就要到了!这是我们自疫情以来的第一次线下活动,届时我们将发布 Spring Framework 6 和 Spring Boot 3,分别是 Spring 和 Spring Boot 的下一代产品。活动将于 12 月 6 日至 8 日在我阳光明媚的加利福尼亚州旧金山举行!立即在 SpringOne.io 注册,并使用代码 S1VM22_Advocate_200 即可享受当前注册价格的 $200 折扣。
我谨代表团队,很高兴地宣布发布 Spring Session 2022.0.0-M3。这些版本带来了增强功能、错误修复和依赖项升级。为了方便您,Spring Boot 将在其即将发布的新版本中采纳这些构件。
以下模块已作为 2022.0.0-M3 的一部分进行了更新
- Spring Session Core
3.0.0-M4 - 发布说明
- Spring Session Data Redis
3.0.0-M4 - 发布说明
- Spring Session JDBC
3.0.0-M4 - 发布说明
- Spring Session Hazelcast
3.0.0-M4 - 发布说明
领先一步
VMware 提供培训和认证,助您加速进步。
了解更多获得支持
Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。
了解更多即将举行的活动
查看 Spring 社区所有即将举行的活动。
查看所有