2017-07-17 5 views
1

モバイルアプリケーションでは、私はほとんどのユーザーのために働いているADAL認証ロジックを書いています。authContext.AcquireTokenAsyncのmultiple_matching_tokens_detected例外

var authContext = new AuthenticationContext(authority); 
var controller = 
UIApplication.SharedApplication.KeyWindow.RootViewController; 
var uri = new Uri(returnUri); 
var platformParams = new PlatformParameters(controller); 
var authResult = await authContext.AcquireTokenAsync(resource, clientId, 
uri, platformParams); 

2-3人の奇妙なユーザーだけが例外を下回っています。

{Microsoft.IdentityModel.Clients.ActiveDirectory.AdalException:multiple_matching_tokens_detected:キャッシュには、要件を満たす複数のトークンが含まれています。 Microsoft.IdentityModel.Client ...でさらに引数(例:UserId)を提供するAcquireTokenを呼び出してください。

この問題の根本原因は何ですか?なぜそれは少数のユーザーのために来るのですか?これを解決するには?

答えて

1

これは、権限/クライアントID /リソースの所定のタプルごとに、ADALのキャッシュにこれらの値に一致する複数のトークンがあることを意味します。通常は、複数のアカウントを使用してトークンを取得すると、複数のエントリ(すべてが同じ権限/クライアントID /リソースで、ユーザーIDは異なる)を使用してトークンを取得します。 あなたのアプリケーションが複数のアカウントを一度にサポートするのであれば、あいまいさを解消できるように、userIDを要求するAcquireTokenAsyncのオーバーロードを呼び出す必要があります。 あなたのアプリが1人のユーザーであることを意図している場合は、複数のユーザーがどのようになったかを理解する必要があります。ユーザーがあなたのアプリにアカウント情報を入力して、別のアカウントを使うことができるステップにフラグを立てることをお勧めします。 AcquireTokenAsyncで意図したアカウント識別子を渡すことによってユーザーを助けることができます。これは、正しいアカウント名でUXを事前入力します。