使用 MSAL 在 Azure AD B2C Android 中注销

Logout in Azure AD B2C Android using MSAL

我已经使用 MSAL library 在我的移动应用程序上集成了 Azure AD B2C。我已经为 SignIn and SignUp 创建了用户流。身份验证成功后,我将获得访问令牌。所以我在我的Activity页面之一的移动应用程序上设计了我的注销按钮,所以一旦我点击在应用程序上设计的注销按钮,我需要从应用程序中获取用户signedOut。那么我们如何在 Android 上在 AZURE AD B2C MSAL 中执行 SignOut

即使我清除了我偏好保存的访问令牌也可以吗?或者是否有任何其他方法可以通过 MSAL 库从 Azure 端注销?

MSAL 库提供 a logout method that clears the cache in browser storage and sends a sign-out request to Azure Active Directory (Azure AD). Request will be done against the end_session_endpoint URL obtained from the B2C policy metadata. Keep in mind single sign out is supported only by custom policies 并且它适用于同一浏览器,而不适用于设备。

对于本机 Android 移动应用程序,请使用 Ms 文档中的 signout function

要从缓存中删除此用户,您必须为每个策略调用 removeAccount()

PublicClientApplication publicClient = MyApplication.getInstance().getPublicClient();
User currentUser = Helpers.getUserByPolicy(publicClient.getUsers(), Constant.SIGN_UP_POLICY);
publicClient.remove(currentUser);
//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
        )

    }