我们正在使用 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.
这什么时候发生?应该如何处理这种情况?
我们正在使用 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.
这什么时候发生?应该如何处理这种情况?
ADAL 为设备上的所有访问/刷新令牌提供令牌缓存。诸如用户、正在请求的资源等的缓存键。
应用程序可能会进入缓存中有多个令牌用于同一请求的状态。虽然这些令牌可能代表一些不同的信息,但令牌查找请求中提供的信息在某种程度上是模棱两可的。简单的例子:
hash(userA,B,C) -> token pair 1
hash(userB,B,C) -> token pair 2
hash(userA,F,G) -> token pair 3
所以现在我们执行 AcquireTokenSilent 请求(缓存查找)。此请求不需要缓存的每个数据透视。例如,
AcquireTokenSilent(B, C)
此请求存在歧义,它可能映射到令牌对 1 或 2。
因此,此时有两种解决方法:
在同一请求中提供更多信息。
您可以执行一个新的 AcquireTokenSilent 请求,提供一些允许 ADAL 明确选择缓存条目的更多信息。在这种情况下,ADAL 需要一个 userId,这意味着您的应用需要存储或查找此值并将其传递到请求中。在我们的示例中,
AcquireTokenSilent(userA, B, C)
忽略缓存并从头开始。
如果您无法检索 userId 并且无法恢复,您的应用程序可以执行交互式身份验证请求并要求最终用户输入他们的凭据。如果您有一个有效的令牌,这是一种不利的体验,因为您的用户将需要进行更多的登录。这只是一个标准的 AcquireToken 请求。在我们的示例中(没有用户可以请求,
AcquireToken(B, C)