我正在使用 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/