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)