c# - 即使在注销后,ADAL for .NET for iOS 应用程序也可以对以前的用户进行身份验证

标签 c# ios azure xamarin adal

我正在使用 Xamarin 编写一个 iOS 应用程序,该应用程序使用 Azure Active Directory 作为身份验证提供程序,并在 Azure Web 应用程序中使用 REST API。我使用的是 ADAL .NET 版本 3.5.208012240。
有一种情况,即使注销后,以前的用户也可能无需输入密码即可成功登录。
当用户选择退出时,应用程序会调用
authenticationContext.TokenCache.Clear()
/oauth2/logout
下次尝试登录时,它会再次调用 AcquireTokenAsync(),如下所示:

_authResult = await _authContext.AcquireTokenAsync(ResourceUri, 
ClientId, new Uri(RedirectUrl), platformParam);

这将显示正常的 Microsoft 登录网页,其中有一个链接,内容为“无法访问您的帐户?”当用户点击此链接时,它会重定向到标题为“Microsoft 在线密码重置”和标题“无法访问您的帐户?”的页面。接下来是文本“通过浏览器访问passwordreset.microsoftonline.com 以重置密码。”还有一个“返回”链接。
当用户点击“返回”时,它会从 AcquireTokenAsync() 返回,并使用与前一个注销用户相同的 token 。发生这种情况时,应用程序将继续运行,就像该用户已再次成功登录一样。
我知道服务器可能使用浏览器 cookie 来执行此操作,但我不确定如何防止这种情况:用户注销,然后同一设备上的不同用户可以作为前一个用户登录而无需输入密码。
有没有办法防止这种情况发生?

最佳答案

这是因为您必须删除 NSHttpCookieStorage 上存储的所有 cookie。执行以下两项操作:ADAL 注销并删除所有 cookie。

关于c# - 即使在注销后,ADAL for .NET for iOS 应用程序也可以对以前的用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33950889/

相关文章:

c# - 按钮 Onclick 事件不起作用

c# - 为什么 EF Core 在所需关系被清空时删除实体?

ios - 计算行程时间 CLLocation Swift

ios - 如何使用 Swift 3 将单例与 Alamofire 一起使用?

node.js - 我可以在 Microsoft Azure 上的 Node.JS 中使用 native 'fs' 文件系统吗?

Azure 机器学习实验无法将 Blob 存储安装到计算集群

c# - c++:使用类型作为 map /字典的键?

ios - Swift:如何在没有 topBorder 的情况下向 UITabBarController 添加阴影

如果调用时间超过 1 分钟,ServiceBus 上的 WCF 服务将失败

C# 开关 : case not falling through to other cases limitation