macos - ADAL Mac 返回 300 AD_ERROR_CACHE_MULTIPLE_USERS 错误

标签 macos azure-active-directory adal microsoft-account

我们正在使用 ADAL Mac 库进行身份验证。使用此库时,我们会收到 300 错误 (AD_ERROR_CACHE_MULTIPLE_USERS),其描述如下: 此资源的 token 缓存存储包含多个用户。请将“userId”参数设置为将要使用的参数。

这是什么时候发生的?应该如何处理这种情况?

最佳答案

背景

ADAL 具有用于设备上所有访问/刷新 token 的 token 缓存。关于用户、请求的资源等的缓存键。

应用程序可以进入一种状态,在这种状态下,同一请求的缓存中有多个 token 。虽然这些 token 可能代表一些不同的信息,但 token 查找请求中提供的信息在某种程度上是模棱两可的。简单示例:

缓存

hash(userA,B,C) -> token pair 1
hash(userB,B,C) -> token pair 2
hash(userA,F,G) -> token pair 3

查找(AcquireTokenSilent)

现在我们执行 AcquireTokenSilent 请求(缓存查找)。此请求不需要缓存的每个枢轴。例如,

AcquireTokenSilent(B, C)

此请求中存在歧义,它可能映射到 token 对 1 或 2。

处理这个错误

所以此时有两种解决方法:

  1. 在同一请求中提供更多信息。

    您可以执行新的 AcquireTokenSilent 请求,提供更多信息,让 ADAL 明确选择缓存条目。在这种情况下,ADAL 需要一个 userId,这意味着您的应用需要存储或查找此值并将其传递到请求中。在我们的示例中,

    AcquireTokenSilent(userA, B, C)
    
  2. 忽略缓存并从头开始。

    如果您无法检索 userId 并且无法恢复,您的应用可以执行交互式身份验证请求并要求最终用户输入他们的凭据。如果您有有效的 token ,这将是一种不利的体验,因为您的用户将需要多次登录。这只是一个标准的 AcquireToken 请求。从我们的示例(没有用户请求,

    AcquireToken(B, C) 
    

关于macos - ADAL Mac 返回 300 AD_ERROR_CACHE_MULTIPLE_USERS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45466342/

相关文章:

ios - 如何使用 SSO 在 iOS 上注销

azure-active-directory - 天蓝色 : Service Principal ID vs Application ID

mysql - MacOS MySQL 消失以及 GateKeeper 导致的本地网络问题

python - 使用 Python 在 Mac 上使用 Windows 身份验证访问 Microsoft SQL Server

java - Ffmpeg 命令未在 Mac OS 上使用 Java RunTime 命令执行

azure - 获取AD组的创建时间戳

azure - 不支持关键字 : 'authentication' error for azure integrated connection

python - 适用于 Python 的 Azure ADAL - 模型没有属性 'acquire_token_with_username_password'

ios - 针对 AD FS 对 iOS 应用程序进行身份验证

c++ - SDL2 在 OSX 上从不同线程创建纹理