Соединение с токеном доступа не удается через некоторое время при сбое входа в систему 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 ответ

Решение

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

Другие вопросы по тегам