在 Azure Active Directory Xamarin Forms 中记住上次登录的用户

Remember last logged in users in Azure Active Directory Xamarin Forms

我正在使用 Azure AD 对我的 Xamarin 表单应用程序中的用户进行身份验证,以及我想在我的 UWP 应用程序中实现的目标,如果一个用户让说登录应用程序然后注销。在下一个登录流程中,Azure AD 应显示已登录该特定设备的用户列表,以便用户可以选择用户并输入密码。

在我的例子中,如果我注销用户,那么它总是从询问电子邮件和密码开始流程

这是注销的代码片段

AuthenticationContext authContext = new AuthenticationContext($"{tenantUrl}/{tenantId}");
                authContext.TokenCache.Clear();

                Windows.Web.Http.Filters.HttpBaseProtocolFilter myFilter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
                var cookieManager = myFilter.CookieManager;
                var cookieUri = new System.Uri(tenantUrl);
                HttpCookieCollection myCookieJar = cookieManager.GetCookies(cookieUri);
                foreach (HttpCookie cookie in myCookieJar)
                {
                    cookieManager.DeleteCookie(cookie);
                }

P.S:似乎是 UWP ADAL 包的问题,​​因为同样的东西在 iOS

上运行良好

使用 ADAL 包,您不会看到上次登录的用户电子邮件 ID。但是如果你默认使用 MSAL 包,你将能够看到最后登录用户的电子邮件 ID 列表。我在我的本地机器上试过,使用 MSAL 包我能够看到用户的电子邮件 ID 列表。下面是截图。

希望以上信息对您有所帮助

好问题!

ADAL 中需要修复(需要发布新版本,因此高于 5.0.2-preview 的任何版本都将有修复)以在 UWP 中处理此问题。

将此代码添加到您的应用程序:

var x = Windows.Security.Authentication.Web.WebAuthenticationBroker.GetCurrentApplicationCallbackUri();

取值(类似这样:ms-app://s-1-15-2-111638678-219698677-36916742-1909548894-372823757-39941306-27685825/)并将该值注册为此应用程序门户中的 redirectUri。

然后,回到代码中, 不要将上述值 (x) 作为 redirectURI 传入,而是传入 null。 ADAL/MSAL 会将重定向 uri 设置为 https://sso,这将通过 WebAuthenticationManager 进行路由,您现在应该会看到一个帐户列表,如 iOS.

您可能也对此感兴趣 documentation,尤其是在企业网络上遇到问题时。