Соединение с токеном доступа не удается через некоторое время при сбое входа в систему NT AUTHORITY \ ANONYMOUS LOGON error - PullRequest
0 голосов
/ 11 января 2019

У меня есть веб-приложение Spring в службе приложений Azure, которое подключается к базе данных SQL Azure с помощью драйвера Microsoft JDBC, аутентифицирующегося с помощью токена доступа. Первоначально он работает найти, но через некоторое время я начинаю получать 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: соединение установлено в com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError (SQLServerException.java:259) в com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF (tdsparser.java:256) на com.microsoft.sqlserver.jdbc.TDSParser.parse (tdsparser.java:108) в com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon (SQLServerConnection.java:4548) в com.microsoft.sqlserver.jdbc.SQLServerConnection.logon (SQLServerConnection.java:3409) в com.microsoft.sqlserver.jdbc.SQLServerConnection.access $ 100 (SQLServerConnection.java:85) в com.microsoft.sqlserver.jdbc.SQLServerConnection $ LogonCommand.doExecute (SQLServerConnection.java:3373) в com.microsoft.sqlserver.jdbc.TDSCommand.execute (IOBuffer.java:7344) в com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand (SQLServerConnection.java:2713) в com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper (SQLServerConnection.java:2261) в com.microsoft.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.sqlserver.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.acquireConnectionIfNeeded (LogicalConnectionManagedImpl.java:106)

1 Ответ

0 голосов
/ 11 января 2019

Вы используете токен, срок действия которого истекает, вы не указываете время жизни токена в своем коде, поэтому время жизни токена зависит от системного значения по умолчанию.

...