Соединение с токеном доступа не удается через некоторое время при сбое входа в систему NT AUTHORITY\ANONYMOUS LOGON error
У меня есть веб-приложение Spring в службе приложений Azure, которое подключается к базе данных SQL Azure с помощью драйвера JDBC Microsoft, проходящего проверку подлинности с использованием токена доступа. Первоначально он работает найти, но через некоторое время я начинаю получать SQLServerException: Ошибка входа для пользователя 'NT AUTHORITY\ANONYMOUS LOGON'
Я следую за шагами, изложенными в документах MS.
AuthenticationContext context = new AuthenticationContext(mySTSUrl, false, Executors.newFixedThreadPool(1));
ClientCredential cred = new ClientCredential(myClientId, myClientSecret);
Future<AuthenticationResult> future = context.acquireToken("https://database.windows.net/", cred, null);
String accessToken = future.get().getAccessToken();
// Connect with the access token.
ds = new SQLServerDataSource();
ds.setServerName(myServer); // Replace with your server name.
ds.setDatabaseName(myDB); // Replace with your database name.
ds.setEncrypt(true);
ds.setAccessToken(accessToken);
ds.setHostNameInCertificate("*.database.windows.net");
ds.setTrustServerCertificate(false);
ds.setLoginTimeout(30);
Это все работает какое-то время (не привязано точное время или триггер), а затем начинает работать с:
Вызванный:
com.microsoft.sqlserver.jdbc.SQLServerException: сбой входа для пользователя 'NT AUTHORITY\ANONYMOUS LOGON'. ClientConnectionId:connectionidredacted по адресу com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:259) по адресу com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.jsoft.jc.TDSParser.parse(tdsparser.java:108) в com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4548) в com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLSerava:3) at3.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:85) по адресу com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3373) в com.mversoft.ql. выполнить (IOBuffer.java:7344) по адресу com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2713) по адресу com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServer.msoft.jpg).sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1921) в com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1762) в com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1077) в com.microsoft.jdbc.SQLServerDataSource.getConnectionInternal(SQLServerDataSource.java:1031) при com.microsoft.sqlserver.jdbc.SQLServerDataSource.getConnection(SQLServerDataSource.java:69) в org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) в org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35) в org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireeanjIjIjIjIjIjIjIjIjIjIjIjIjIf_jl_jf_jl_7_f_7_7
1 ответ
Вы используете токен, срок действия которого истекает, вы не указываете время жизни токена в своем коде, поэтому время жизни токена зависит от системного значения по умолчанию.