使用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/