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)
问题是基本上我https://login.windows.net/common/oauth2/authorize在我的应用程序中使用Common Authority .它适用于AcquireTokenByAuthorizationCode(),但不适用于AcquireTokenSilent().
因此,当调用AcquireTokenByAuthorizationCode()并且权限使用类似于https://login.windows.net/<tenant ID>/oauth2/authorize调用AcquireTokenSilent()时的权限时,我需要它来保存TenantId .这样,上面的代码就可以了.
| 归档时间: |
|
| 查看次数: |
20933 次 |
| 最近记录: |