AcquireTokenSilent始终无法以静默方式获取令牌

Ric*_*olo 14 oauth azure azure-active-directory adal azure-webjobs

使用ADAL我有两个AuthenticationContext使用SQL中持久化的令牌缓存.

使用AcquireTokenByAuthorizationCode它在数据库中写入令牌,但在使用时AcquireTokenSilent我总是得到

无法以静默方式获取令牌.调用方法AcquireToken

以下是复制问题的详细信息:

我创建了一个Context

AuthenticationContext authContext = new AuthenticationContext(_authority, new AzureAdalCache(companyId, _entries, _unitOfWork));
Run Code Online (Sandbox Code Playgroud)

然后我通过授权获取授权

authContext.AcquireTokenByAuthorizationCode(authorizationCode, new Uri(redirectUri), _clientCredential);
Run Code Online (Sandbox Code Playgroud)

此时,它会在数据库中保存一个条目

然后,如果我打电话给我,我得到一个例外.

authContext.AcquireTokenSilent(_authority, _clientCredential, new UserIdentifier(companyId.ToString(), UserIdentifierType.UniqueId)).AccessToken;
Run Code Online (Sandbox Code Playgroud)

我也尝试过相同的结果:

authContext.AcquireTokenSilent(_authority, _clientId).AccessToken;
authContext.AcquireTokenSilent(_authority, _clientCredential, UserIdentifier.AnyUser).AccessToken;
Run Code Online (Sandbox Code Playgroud)

AzureAdalCache这个要点中发布我的实现.

Cache的每个条目都是这样的.

我错过了什么?

更新

根据@vibronet的评论回答,我有这个

AuthenticationContext authContext = new AuthenticationContext(_authority, new AzureAdalCache(companyId, _entries, _unitOfWork));
authContext.AcquireTokenByAuthorizationCode(authorizationCode, new Uri(redirectUri), _clientCredential, _eWSResource);
string result = authContext.AcquireTokenSilent(_eWSResource, _clientId, UserIdentifier.AnyUser).AccessToken;
Run Code Online (Sandbox Code Playgroud)

Ric*_*olo 8

问题是基本上我https://login.windows.net/common/oauth2/authorize在我的应用程序中使用Common Authority .它适用于AcquireTokenByAuthorizationCode(),但不适用于AcquireTokenSilent().

因此,当调用AcquireTokenByAuthorizationCode()并且权限使用类似于https://login.windows.net/<tenant ID>/oauth2/authorize调用AcquireTokenSilent()时的权限时,我需要它来保存TenantId .这样,上面的代码就可以了.

  • 任何示例代码都会有所帮助。因为 AcquireTokenByAuthorizationCodeAsync 会有不同的参数。 (2认同)