在Startup中调用UseRequestLocalization()的位置

时间:2018-01-16 16:21:25

标签: c# asp.net-core identityserver4 asp.net-authentication asp.net-core-localization

我有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承载令牌认证中间件。

1 个答案:

答案 0 :(得分:0)

请求中没有附加cookie,因此身份验证不成功。