我有一个Blazor服务器应用程序正在运行,并启用了Azure AD B2C身份验证
一切似乎都很好,我可以访问用户的JWT令牌,我可以将其与API请求一起传递到后端。。。
然而,1小时后,令牌将过期(我也可以检查我的逻辑,看看令牌是否已过期(。在这种情况下,我显然很想获得一个新的令牌,使用刷新令牌。。。
但这就是问题所在:HttpContext
中的refresh_token
令牌似乎是空的,而id_token
包含实际的JWT承载令牌。
造成这种情况的原因是什么?(我两个代币都是空的,但从来没有说过只有refresh_token不是空的(。
一些可能有助于查明问题的代码片段:
启动逻辑中的身份验证配置。(使用SaveTokens
(
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(
options =>
{
builder.Configuration.Bind("AzureAdB2C", options);
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.Scope.Add("https://xxx.onmicrosoft.com/api/action");
options.UseTokenLifetime = true;
options.SaveTokens = true;
options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
}
,
options =>
{
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.IsEssential = true;
}
);
从HttpContext访问令牌
// Following variable is empty
var rToken = await _httpContextAccessor.HttpContext.GetTokenAsync("refresh_token");
// Following variable contain jwt token
var iToken = await _httpContextAccessor.HttpContext.GetTokenAsync("id_token");
有人知道吗?
将ResponseType
更改为"code id_token token"
将offline_access
添加到您的作用域