【问题标题】:ADAL Mac returns 300 AD_ERROR_CACHE_MULTIPLE_USERS errorADAL Mac 返回 300 AD_ERROR_CACHE_MULTIPLE_USERS 错误
【发布时间】:2017-08-03 01:34:12
【问题描述】:

我们正在使用 ADAL Mac 库进行身份验证。当使用这个库时,我们得到一个 300 错误(AD_ERROR_CACHE_MULTIPLE_USERS),描述如下: The token cache store for this resource contains more than one user. Please set the 'userId' parameter to the one that will be used.

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

【问题讨论】:

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


    【解决方案1】:

    背景

    ADAL 为设备上的所有访问/刷新令牌提供令牌缓存。用户、被请求资源等的缓存键。

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

    缓存

    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)
    

    这个请求有歧义,它可能映射到令牌对 1 或 2。

    处理此错误

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

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

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

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

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

      AcquireToken(B, C) 
      

    【讨论】:

    • 推荐的获取userId的方法是什么?对于刚刚启动的应用,我将如何获取 userId?
    • 第一点解决了我的问题+1,这应该被接受的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多