使用MSAL在Azure AD B2C Android中注销

问题描述

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

即使我清除了按我的偏好保存的访问令牌,也可以吗?还是有其他方法通过MSAL库从Azure侧的Provideb登出?

解决方法

MSAL库提供a logout method,该清除器清除浏览器存储中的缓存,并将注销请求发送到Azure Active Directory(Azure AD)。将针对从B2C policy metadata获得的end_session_endpoint URL进行请求。请记住single sign out is supported only by custom policies,它的作用域是同一浏览器,而不是设备。

对于本机Android移动应用程序,请使用Ms Document中的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
        )

    }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...