Okta 身份验证成功后,HttpContext.User 在重定向时变为空

问题描述 投票:0回答:2

我正在使用 .NET 6 Razor 页面应用程序(不是 MVC),我需要在其中实现 SSO 身份验证 (Okta)。

为此,我在 Razor 页面应用程序中创建了一个 MVC 控制器(我知道这是奇怪的方法),并在 program.cs 中启用路由,如下所示:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers(); // Map attribute-routed API controllers
    endpoints.MapDefaultControllerRoute(); // Map conventional MVC controllers using the default route
    endpoints.MapRazorPages();//map razor pages
});

现在我有一个名为

Privacy
的页面,我用 Authorize 属性进行了装饰,在此页面中,如果用户未经过身份验证,我将重定向以进行 Okta 身份验证。

    [Authorize]
    public void OnGet()
    {
        string UserName = User.Identity.Name;  
      
        if (string.IsNullOrEmpty(UserName)) 
            Response.Redirect("/Account/Login");
    }

现在 Okta 身份验证工作正常,我收到 Okta 登录屏幕,登录页面,它被重定向回我的控制器,所有必需的声明均已正确设置。 (我可以在我设置的 HttpContext.User 对象的快速监视中验证它)。

public async Task<ActionResult> Login()
    {            
        var oktaResult = await HttpContext.AuthenticateAsync(OpenIdConnectDefaults.AuthenticationScheme);
        if (oktaResult.Succeeded)
        {
            HttpContext.User = new ClaimsPrincipal(oktaResult.Principal.Identity);
            return RedirectToPage("/Privacy");  // <--- Here is the problem
        }

        return Challenge(OpenIdConnectDefaults.AuthenticationScheme);
    }

问题是,重定向回

/Privacy
页面后,
HttpContext.User
对象再次变为空白。

我不明白为什么。我在这里做错了什么?

asp.net-core .net-core razor okta
2个回答
0
投票

确保您的 Cookie 政策设置正确。

 app.UseCookiePolicy(new CookiePolicyOptions { MinimumSameSitePolicy = SameSiteMode.None });

0
投票

按如下顺序调用中间件:UseRouting、UseAuthentication、UseAuthorization、UseEndpoints。

    app.UseRouting();
    
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
   {
    endpoints.MapControllers(); // Map attribute-routed API controllers
    endpoints.MapDefaultControllerRoute(); // Map conventional MVC controllers using the default route
    endpoints.MapRazorPages();//map razor pages
   });

您可以阅读配置身份服务了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.