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

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


静默获取令牌失败。调用方法AcquireToken


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

我创建一个上下文

AuthenticationContext authContext = new AuthenticationContext(_authority, new AzureAdalCache(companyId, _entries, _unitOfWork));


然后我通过授权获取令牌

authContext.AcquireTokenByAuthorizationCode(authorizationCode, new Uri(redirectUri), _clientCredential);


此时,它将条目保存在数据库中

然后,如果我称此为例外。

authContext.AcquireTokenSilent(_authority, _clientCredential, new UserIdentifier(companyId.ToString(), UserIdentifierType.UniqueId)).AccessToken;


我也尝试了相同的结果:

authContext.AcquireTokenSilent(_authority, _clientId).AccessToken;
authContext.AcquireTokenSilent(_authority, _clientCredential, UserIdentifier.AnyUser).AccessToken;


我在this Gist中发布我的AzureAdalCache实现。

缓存的每个条目都是like this

我想念什么?

更新资料

根据@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;

最佳答案

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

因此,在调用AcquireTokenByAuthorizationCode()时,我需要它来保存TenantId;而在调用AcquireTokenSilent()时,授权机构应使用https://login.windows.net/<tenant ID>/oauth2/authorize之类的授权。这样,上面的相同代码可以工作。

关于azure - AcquireTokenSilent始终无法以静默方式获取 token ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29740339/

10-11 01:48