我有IRequestCultureProvider
的自定义实现。此提供程序检查用户是否未登录,然后设置当前区域性,否则不设置区域性。如果用户已登录,其他文化提供者将设置当前文化。
在Configure方法中,我在身份验证中间件之后使用UseRequestLocalization()
,以便填充HttpContext.User
属性。但是,属性httpContext.User.Identity.IsAuthenticated
永远不会成立,它总是设置文化。
日志显示,Culture Provider在承载令牌认证中间件调用之前设置文化,该中间件调用应填充HttpContext.User
属性。
我不明白为什么。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
var defaultRequestCultureProvider = app.ApplicationServices.GetService<DefaultRequestCultureProvider>();
localizationOptions.RequestCultureProviders.Insert(1, defaultRequestCultureProvider);
app.Map("/api", webApiApp => ConfigureWebApiBranch(webApiApp,localizationOptions.Value));
// Removed for brevity
}
private void ConfigureWebApiBranch(IApplicationBuilder webApi, RequestLocalizationOptions localizationOptions)
{
webApi.UseCors(Constants.CorsPolicyName);
webApi.UseAuthentication();
webApi.UseRequestLocalization(localizationOptions);
webApi.UseMvc();
}
我使用的是IdentityServer4承载令牌认证中间件。
答案 0 :(得分:0)
请求中没有附加cookie,因此身份验证不成功。