0

我正在尝试使用 Azure AD(将应用程序作为 DB 用户)从我的 Spring Boot (2.0.1) Web 应用程序连接到 Azure SQL DB,但似乎无法连接这些点。

我按照使用 Azure AD Auth 进行连接的步骤进行操作。但是,我登录失败。

我假设这是因为没有在 JDBC url 中设置 'authentication' 属性,它只是直接对数据库进行身份验证(使用 CREATE USER <> FROM EXTERNAL PROVIDER 从指令创建的用户)?

有没有办法配置 spring 数据源/jdbc 库以在连接时使用正确的 Azure AD 身份验证(adal4j-1.6.3)?该示例在代码中执行此操作,但我无法找到正确的配置。

我尝试使用“authentication=ActiveDirectoryPassword”,但不断收到“AADSTS50034:目录中不存在用户帐户”错误。

spring.datasource.url="jdbc:sqlserver://myServer.database.windows.net:1433;database=myDB;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;applicationName =我的应用程序;"

spring.datasource.username: <user>
spring.datasource.accessToken: <key>

更大的目标是保护我的数据库对特定应用程序的访问。我已将我的应用程序添加为我的服务器上的阅读器,理想情况下将作为该应用程序进行身份验证,以跟踪该应用程序的使用/分析/等。

如果这太远了,我很抱歉,我是 Azure 和 Oauth 的新手。谢谢。

4

4 回答 4

2

对我来说,以下属性和依赖项有效:

我没有使用adal4j,而是使用了msal4j(微软推荐)

spring:
  datasource:
    url: jdbc:sqlserver://<Azure SQL Server Name>.database.windows.net:1433;databaseName=<DB Name>;encrypt=true;loginTimeout=30
    username: <UserName>
    password: <Password>
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    hikari:
      data-source-properties:
        authentication: ActiveDirectoryPassword

pom.xml

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>9.2.1.jre8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.microsoft.azure/msal4j -->
<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>msal4j</artifactId>
    <version>1.9.1</version>
</dependency>
于 2021-05-08T15:01:09.780 回答
1

在连接到 Azure SQL DB 时,无法将 Spring 配置为使用 Azure AD 中的应用程序 ID + 密钥代替用户名/密码。我发现的唯一方法是修改代码并创建一个返回 SQLServerDataSource 的 @Bean 方法,在该方法中我手动检索客户端凭据访问令牌并将其传递到数据源中。

使用访问令牌连接- 显示如何检索令牌并在数据源上设置

创建自定义数据源- 展示如何使用 Spring 创建和使用自定义数据源

还要注意令牌管理(请参阅我的其他问题)。

于 2019-01-10T17:17:03.427 回答
1

包括具有以下配置的依赖 adal4j 会有所帮助

spring.datasource.username=\<your AD username\>
spring.datasource.password=\<your AD password\>
spring.datasource.hikari.data-source-properties.authentication=ActiveDirectoryPassword
于 2020-10-27T16:08:32.547 回答
0

请确认您使用的用户存在于数据库中,并且是您的数据库所在的同一租户中的用户。如果您使用的 Microsoft JDBC Driver 版本早于 4.0 版本,则还需要将服务器名称附加到连接字符串的 UserId 中。

https://docs.microsoft.com/en-us/sql/connect/jdbc/connecting-to-an-azure-sql-database?view=sql-server-2017

于 2018-12-31T21:31:14.707 回答