使用用户名/密码凭据从一个应用访问另一个应用会带来巨大的安全风险。今天,我们宣布推出 Java 应用连接 Azure 数据库和事件服务的无密码连接预览版,让您最终摆脱使用密码的方式。
密码带来的安全挑战
应谨慎使用密码,开发者绝不能将密码放在不安全的位置。许多 Java 应用使用用户名和密码,或其他敏感凭据,例如访问令牌或连接字符串,连接到后端数据、缓存、消息和事件服务。如果暴露,密码可能被用于未经授权地访问敏感信息,例如您为即将到来的活动构建的销售目录,或仅仅是必须保密的所有客户数据。
将密码嵌入应用程序本身会带来巨大的安全风险,原因有很多,包括通过代码仓库被发现(见图 1)。许多开发者使用环境变量将密码外部化,以便应用可以从不同的环境加载密码。然而,这只是将风险从代码本身转移到了执行环境。任何获得环境访问权限的人都可以窃取密码,这反过来又增加了您的数据泄露风险。
图 1 – 显示了包含嵌入式用户名和密码连接数据库的 Java 代码
我们的客户可能有严格的安全要求,需要在不向开发者、运维人员或任何其他人暴露密码的情况下连接 Azure 服务。他们通常使用密钥保管库来存储密码并将其加载到应用程序中,并通过添加密码轮换要求和流程来进一步降低风险。这反过来会增加运维复杂性,并可能导致应用程序连接中断。
无密码连接 – 零信任
现在您可以在应用程序中使用无密码连接,通过无代码配置连接到基于 Azure 的服务。您不再需要定期轮换密码。零信任遵循“永不信任,始终验证且无需凭证”的原则,通过在授予机器或用户访问后端服务的权限之前验证其身份,帮助确保所有通信的安全。
“我们拥有的每一个密码和每一个密钥保管库都是潜在的风险,增加了更多的开销和管理成本。我总是很高兴看到有更多的身份验证和授权工作为我们处理好,并作为简单的集成方案交付到 Azure 上的 Java 和 Spring 生态系统中。当我现在 PostgreSQL 支持无密码连接而删除我们的密钥保管库时,我不会流一滴眼泪。”
-Jonathan Jones,首席解决方案架构师,瑞士再保险管理有限公司 (瑞士)
使用托管标识和 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 – 数据源配置“spring.datasource.url”显示无密码连接
让我们考虑一个使用 Spring Cloud Azure starter 连接 PostgreSQL 数据库的 Spring Boot 应用。starter 为 Spring Data JPA 模块构建了一个不含密码的连接字符串。通过连接字符串,驱动程序明白它必须加载使用 Azure Identity Client Library 获取访问令牌的 Azure JDBC 身份验证插件。驱动程序使用该令牌作为密码登录数据库 - 不再需要密码。
对于本地开发和测试,开发者可以使用相同的配置,无需使用密码连接到服务。您将通过 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 美元折扣…
领先一步
VMware 提供培训和认证,助您加速进步。
了解更多获取支持
Tanzu Spring 通过一份简单的订阅即可提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。
了解更多近期活动
查看 Spring 社区所有近期活动。
查看全部