【发布时间】:2023-03-15 19:48:01
【问题描述】:
我相信我的标题中包含了所有内容。
我有一个使用 Gradle 和 jib 作为 Docker Linux 容器构建的 Spring Boot 应用程序。
runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc'
runtimeOnly 'com.microsoft.sqlserver:mssql-jdbc_auth:9.4.0.x64'
该应用程序现在正在部署到 Azure Web App for Containers,我在其中通过 Identity 选项卡设置了 Web 应用程序的 AAD 身份,并分配了一个 贡献者在目标 SQL Server 中的角色。
我确信一切都已准备就绪。该应用附带Flyway,因此它会在默认架构中自行创建表。
我在 Azure 配置选项卡中设置了下面的环境变量
SPRING_DATASOURCE_URL=jdbc:sqlserver://????.database.windows.net:1433;database=?????;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;Authentication=ActiveDirectoryIntegrated
我认为这是所需的一切。
相反,例外是(与本地 Docker 完全相同)
2021-12-23T15:51:35.891324272Z Caused by: java.lang.IllegalArgumentException: KrbException: Cannot locate default realm
2021-12-23T15:51:35.891327972Z at java.security.jgss/javax.security.auth.kerberos.KerberosPrincipal.<init>(Unknown Source) ~[java.security.jgss:na]
2021-12-23T15:51:35.891331972Z at java.security.jgss/javax.security.auth.kerberos.KerberosPrincipal.<init>(Unknown Source) ~[java.security.jgss:na]
2021-12-23T15:51:35.891335972Z at com.microsoft.sqlserver.jdbc.SQLServerMSAL4JUtils.getSqlFedAuthTokenIntegrated(SQLServerMSAL4JUtils.java:106) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891339872Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.getFedAuthToken(SQLServerConnection.java:4849) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891343672Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.onFedAuthInfo(SQLServerConnection.java:4724) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891348072Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.processFedAuthInfo(SQLServerConnection.java:4680) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891352072Z at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onFedAuthInfo(tdsparser.java:289) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891355872Z at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:125) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891359673Z at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:37) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891363573Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:5560) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891367373Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:4289) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891371173Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:88) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891375073Z at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:4227) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891378773Z at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7417) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891382573Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3488) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891386373Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2978) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891393373Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2628) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891397373Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2471) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891401273Z at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1470) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891405173Z at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:915) ~[mssql-jdbc-9.4.0.jre8.jar:na]
2021-12-23T15:51:35.891408973Z at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:121) ~[HikariCP-4.0.3.jar:na]
2021-12-23T15:51:35.891412773Z at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:na]
2021-12-23T15:51:35.891417173Z at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:na]
2021-12-23T15:51:35.891421173Z at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:na]
2021-12-23T15:51:35.891424973Z at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:na]
2021-12-23T15:51:35.891428873Z ... 32 common frames omitted
2021-12-23T15:51:35.891432573Z
在本地,这很明显。我绝对没有 KRB 配置。
但我认为 Azure 会在我导航门户上的“身份”选项卡时自动配置容器(我的应用程序的身份所在的位置,即 395f00ce-c4ed-4be5-ac35-7767f4799555)
问题:为了将 Web 应用程序的无密码后端到后端身份验证配置到 Azure SQL Server,我可以/必须做些什么?
我读过一些tutorials,其中包括许多机器级别的配置步骤,但我们谈论的是由 Azure 部署和管理的容器。我不知道这些是否适用。 Docker镜像是Jib构建的Spring Boot兼容镜像,所以我没有Dockerfile
【问题讨论】:
-
您是否使用 az login --identity 从容器/Web 应用登录到 Azure
-
没有。我没有从容器中运行任何 内容。它只是一个基于 Java 11 的普通 Docker/Spring Boot 映像。我认为容器在
$PATH中没有可用的az命令。我不知道az login的影响但我已通过 Azure 门户 Web 界面为 Web 应用程序分配了一个标识。我不知道它是否与问题中指定的上述命令具有相同的效果。该 GUID 在 SQL 数据库中为Collaborator
标签: java azure jdbc azure-active-directory azure-sql-server