c# - 尝试在 c# 中获取令牌时出现 AdalSilentTokenAcquisitionException
问题描述
我正在尝试使用连接到我的天蓝色应用程序,acquireTokenSilentAsync
但出现异常,这是代码:
public class Oauth
{
public const string OAuthHeader = "Authorization";
public static String GetUserAccessTokenAsync()
{
AuthenticationResult result = null;
string aadTenant = TestConfiguration.Default.ActiveDirectoryTenant;
string aadClientAppId = TestConfiguration.Default.ActiveDirectoryClientAppId;
string aadResource = TestConfiguration.Default.ActiveDirectoryResource;
var authenticationContext = new AuthenticationContext(aadTenant, TokenCache.DefaultShared);
result = authenticationContext.AcquireTokenSilentAsync(aadResource, aadClientAppId).Result;
if (result != null)
{
var accessToken = result.AccessToken;
// Use the token
return accessToken;
}
else
{
return "";
}
}
}
我在此行收到以下错误:
result = authenticationContext.AcquireTokenSilentAsync(aadResource, aadClientAppId).Result;
AdalSilentTokenAcquisitionException:无法静默获取令牌,因为在缓存中未找到令牌。调用方法 AcquireToken
怎么了?
解决方案
当您尝试静默获取令牌时,它会从 TokenCache 中获取令牌或静默使用 refreshToken。因此,当缓存中没有令牌时,AdalException 返回。你可以参考这篇文章。
请注意,
AcquireTokenSilent
不需要在客户端凭据流中调用(当应用程序在没有用户的情况下获取令牌时,但以自己的名义)请注意,
AcquireTokenSilent
失败可能有多种原因,例如缓存不包含用户的令牌,或者令牌已过期且无法刷新。
try
{
result = await ac.AcquireTokenSilentAsync(resource, clientId);
}
catch (AdalException adalException)
{
if (adalException.ErrorCode == AdalError.FailedToAcquireTokenSilently
|| adalException.ErrorCode == AdalError.InteractionRequired)
{
result = await ac.AcquireTokenAsync(resource, clientId, redirectUri,
new PlatformParameters(PromptBehavior.Auto));
}
}
推荐阅读
- xml - Google 表格中的 IMPORTXML 公式
- r - 如何更新renderIU中的选择输入?
- python - Holoview 中数据标签的字体大小
- google-apps-script - 当它说 TypeError: Cannot read property 'getLastRow' of null 时如何解决这个问题?
- .net - 在函数中运行 foreach 循环时,PowerShell .NET Winform GUI 冻结
- node.js - Docusign API 提醒/到期
- mysql - 为什么我在 FROM 语句中出现错误?
- java - Swagger2 无法访问
- sql - 为某些日期不存在的数据返回 NULL
- firebase - 如何在禁用 3rd 方 cookie 的情况下修复我的 firebase 身份验证 UI 问题?