Java-реализация Microsoft MSAL ISingleAccountPublicClientApplication.acquireTokenSilent устарела, новый метод дает 401 несанкционированную ошибку

Java-методы MSAL дляISingleAccountPublicClientApplication signIn(activity, loginHint, scopes, authenticationCallback)иacquireTokenSilent(scopes, authority)устарел, в пользу методов сборки.

Поэтому я изменил использованиеSignInParameters.builder()так:

(ниже в котлине)

От:

      ...signIn(
    signInActivity,
    null, //loginHint 
    arrayOf(accessScope),
    object : AuthenticationCallback { /*omitted*/ },
   )
       

К:

      ...signIn(
    SignInParameters.builder(
        .withActivity(signInActivity),
        .withScopes(arrayOf(accessScope).toMutableList())
        .withCallback(
            object : AuthenticationCallback { /*omitted*/ 
        })
        .build()
    )


Пока что процесс входа в систему проходит нормально, ошибок нет, но проблемы возникают, когда я вызываю новый метод сAcquireTokenSilentParametersиспользовал.

От:

      val iAuthenticationResult = singleAccountApp.acquireTokenSilent(
                                arrayOf(accessScope),
                                MICROSOFT_ACCESS_AUTHORITY
                        )

К:

      val iAuthenticationResult = singleAccountApp.acquireTokenSilent(
                            AcquireTokenSilentParameters(
                                AcquireTokenSilentParameters.Builder()
                                    .withScopes(arrayOf(accessScope).toMutableList())
                                    .fromAuthority(MICROSOFT_ACCESS_AUTHORITY)
                            )
                        )

Теперь я получаю следующее сообщение об ошибке в ответ при получении токена:The signed in account does not match the provided accountчто в дальнейшем вызывает401 Unauthorizedответ.

Возврат к использованию старого метода не приводит к ошибкам, и предоставляется токен.

Теперь я застрял в новом дляsignInметод, но старый дляacquireTokenSilentметод.

Есть ли что-то, что я пропустил или забыл, используя более новый?

1 ответ

Вы должны «предоставить» currentAccount вошедшего в систему пользователя.

      val parameters = AcquireTokenSilentParameters.Builder()
            .withScopes(arrayOf(accessScope).toMutableList())
            .fromAuthority(MICROSOFT_ACCESS_AUTHORITY)
            .forAccount(singleAccountApp.currentAccount.currentAccount)
            .build()

val iAuthenticationResult = singleAccountApp.acquireTokenSilent(parameters)
Другие вопросы по тегам