ASP.NET Core Keycloak 身份验证 - 访问令牌过期

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

我正在尝试使用 Keycloak 作为身份提供者在 Web api 中设置一个简单的身份验证过程。几乎一切都按预期进行。当客户端尝试访问受保护的路由时,将显示 keycloak 登录弹出窗口,用户登录并存储 asp.net 和 keycloak cookie。

Stored cookies

在领域设置中,我将访问令牌的生命周期指定为 30 秒。

Access token lifespan

出于测试目的,当我删除了 Keycloak cookie 并仅保留由 Web api 创建的 cookie 时,我的受保护路由仍然可以访问。但问题是,即使访问令牌已经过期(30 秒过去),它仍然可以访问。你能向我解释一下为什么会这样吗?

这是代码的身份验证部分:

builder.Services.AddAuthorization();
builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
    options.RequireHttpsMetadata = false;
    options.Authority = "http://localhost:8080/realms/testrealm";
    options.ClientId = "testclient";
    options.ClientSecret = "kUOYGYajzgic9Feuw5rE5WRQLtgXuNTm";
    options.ResponseType = "code";
    options.SaveTokens = true;
    options.Scope.Add("openid");
    options.TokenValidationParameters = new TokenValidationParameters
    {
        NameClaimType = "preferred_username",
        RoleClaimType = "roles",
        ValidateLifetime = true,
        ClockSkew = TimeSpan.Zero
    };
});

我尝试更改时钟偏差,从领域会话面板中注销用户,但受保护的路由仍然可以访问。

c# asp.net .net authentication keycloak
1个回答
0
投票

该问题可能是因为Keycloak和aspnet core冲突造成的。对于我的测试结果,身份验证状态可以由keycloak会话和aspnet cookie同时维护,因此如果您清除浏览器中的所有cookie,或者在清除keycloak中的会话后删除aspnet生成的cookie。您应该需要重新登录。

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