ADAL Mac returns 300 AD_ERROR_CACHE_MULTIPLE_USERS error

橙三吉。 提交于 2021-02-07 20:55:18

问题


We are using the ADAL Mac library to authenticate. When using this library we get a 300 error (AD_ERROR_CACHE_MULTIPLE_USERS) with the description: The token cache store for this resource contains more than one user. Please set the 'userId' parameter to the one that will be used.

When does this happen? How should one handle this scenario?


回答1:


Background

ADAL has a token cache for all access/refresh tokens on the device. The cache keys on things like the user, resource being requested, etc.

The app can get into a state in which there are multiple tokens in the cache for the same request. While these tokens may represent something some different information, the information provided in the token lookup request was ambiguous in some way. Simple example:

Cache

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

Lookup (AcquireTokenSilent)

So now we do an AcquireTokenSilent request (cache lookup). This request doesn't require every pivot of the cache. For example,

AcquireTokenSilent(B, C)

There's ambiguity in this request, it could map to token pair 1 or 2.

Handling this Error

So there's two workarounds at this point:

  1. Provide more information in the same request.

    You can do a new AcquireTokenSilent request providing some more information that allows ADAL to definitively pick a cache entry. In this case, ADAL needs a userId meaning your app would need to store or lookup this value and pass it in the request. In our example,

    AcquireTokenSilent(userA, B, C)
    
  2. Ignore the cache and start from scratch.

    If you cannot retrieve the userId and have no way to recover, your app can perform an interactive authentication request and ask the end user to enter their credentials. If you have a valid token, this is an adverse experience as your users will need to sign in more than necessary. This would just be a standard AcquireToken request. From our example (there's no user to request,

    AcquireToken(B, C) 
    


来源:https://stackoverflow.com/questions/45466342/adal-mac-returns-300-ad-error-cache-multiple-users-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!