这是我的startup.cs代码
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddAzureAdBearer(configureOptions =>
{
configureOptions.Instance = Environment.GetEnvironmentVariable("AD_Instance");
configureOptions.Domain = Environment.GetEnvironmentVariable("AD_Domain");
configureOptions.TenantId = Environment.GetEnvironmentVariable("AD_TenantId");
configureOptions.ClientId = Environment.GetEnvironmentVariable("AD_ClientId");
}
JwtBearerDefaults.AuthenticationScheme是Bearer
这些是我的选择:
public void Configure(string name, JwtBearerOptions options)
{
options.Audience = _azureOptions.ClientId;
options.Authority = $"{_azureOptions.Instance}{_azureOptions.TenantId}";
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = false
};
options.SaveToken = true;
}
现在,根据许多博客和问题&这里的答案 我使用此代码来检索令牌:(顺便说一下,应用程序已经工作超过6个月了,不考虑一些设置问题)
var token = _httpContextAccessor.HttpContext.GetTokenAsync("access_token");
这就是它的回报:
我需要的是access_token。恩。持票人eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1 ...
更新 在我看到评论/答案之后,我添加了等待,但结果我得到了空。
答案 0 :(得分:0)
方法GetTokenAsync("access_token")
是异步的,并返回System.Threading.Tasks.Task<string>
结果。所以这里的var
正在转换为:
Task<string> token = _httpContextAccessor.HttpContext.GetTokenAsync("access_token");
要访问实际结果,您需要从任务中解压缩它。最简单的方法是使用await
关键字:
string token = await _httpContextAccessor.HttpContext.GetTokenAsync("access_token");