Выход из системы в Azure AD B2C Android с использованием MSAL

#android #azure #azure-ad-b2c #msal

#Android #azure #azure-ad-b2c #msal

Вопрос:

я интегрировал Azure AD B2C в свое мобильное приложение с помощью MSAL library . Я создал пользовательские потоки для SignIn and SignUp . Я получаю токен доступа после успешной аутентификации. итак, у меня есть кнопка выхода, разработанная в моем мобильном приложении на одной из моих страниц активности, поэтому, как только я нажимаю на кнопку выхода, разработанную в приложении, мне нужно получить пользователя signedOut из приложения. итак, как мы можем сделать SignOut в AZURE AD B2C MSAL на Android?

все ли в порядке, даже если я очищу маркер доступа, сохраненный в моих настройках? или есть какой-либо другой способ выхода из системы со стороны Azure, предоставляемый MSAL библиотекой?

Ответ №1:

Библиотека MSAL предоставляет метод выхода, который очищает кэш в хранилище браузера и отправляет запрос на выход в Azure Active Directory (Azure AD). Запрос будет выполнен по end_session_endpoint URL, полученному из метаданных политики B2C. Имейте в виду, что единый выход поддерживается только пользовательскими политиками и что он ограничен одним и тем же браузером, а не устройством.

Для собственного мобильного приложения Android, пожалуйста, используйте функцию выхода в Ms Document

Комментарии:

1. Кришна — В настоящее время это для собственных мобильных приложений, и это тоже реализовано с использованием MSAL для мобильных приложений. итак, как я смогу выйти из системы с моего мобильного устройства?

2. Кришна — Я полагаю, это для реализации на веб-стороне. В настоящее время я спрашивал о signOut процессе на родных устройствах Android из AZURE AD B2C MSAL

3. Привет @vinayak, пожалуйста, дайте мне знать, что мой обновленный ответ помогает.

4. Кришна — У меня все работало нормально. Я перешел по предоставленной вами ссылке.

Ответ №2:

Чтобы удалить этого пользователя из кэша, необходимо вызвать removeAccount() для каждой политики.

 PublicClientApplication publicClient = MyApplication.getInstance().getPublicClient();
User currentUser = Helpers.getUserByPolicy(publicClient.getUsers(), Constant.SIGN_UP_POLICY);
publicClient.remove(currentUser);
  

Ответ №3:

 //Load account using publicClientApplication 
private fun loadAccounts(mMultipleAccountApp: IMultipleAccountPublicClientApplication) {
        mMultipleAccountApp.getAccounts(object: IPublicClientApplication.LoadAccountsCallback {
            override fun onTaskCompleted(result: List<IAccount>) {
                val accountList: List<IAccount> = result
                removeAccounts(mMultipleAccountApp, accountList)
            }

            override fun onError(exception: MsalException) {
               Log.d("Error",exception.message)
            }
        })
    }


//call remove account
private fun removeAccounts(
        mMultipleAccountApp: IMultipleAccountPublicClientApplication,
        accountList: List<IAccount>
    ) {
        val removeCallback =
            object : IMultipleAccountPublicClientApplication.RemoveAccountCallback {
                override fun onRemoved() {
                    // Redirect to login
                    }

                override fun onError(exception: MsalException) {
                     Log.d("Error",exception.message)
                }
            }

        B2CUser.signOutAsync(
            accountList,
            mMultipleAccountApp, removeCallback
        )

    }