AspNetCore OpenIdConnect cookie认证方案处理过期

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

我在使用 openIdConnect 和 cookie 身份验证处理应用程序中过期的访问令牌时遇到问题。

很像这个问题:AddOpenIdConnect and Refresh Tokens in ASP.NET Core

答案是监听 cookievalidation 事件,并验证 accesstoken。

这给我留下了一个新问题,如果不能确保 accesstoken 过期,那么使用 cookie 身份验证方案还有什么意义?

正如我所见,除非您为此注入自定义代码,否则身份验证方案将始终失败,因为每次请求都会在浏览器中更新 cookie 过期时间,并且身份验证方案不会强制 accesstoken 的生命周期,即使在 UseTokenLifetime 时也是如此=真。 这使得 UseTokenLifetime 选项完全无用。

我在这里缺少什么,是否存在这种身份验证方案有意义的用例,无需对 cookie 中的令牌进行自定义处理?

如果相关,以下是我在应用程序中配置它的方法:

builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
    options.LoginPath = "/Account/Login";
    options.ExpireTimeSpan = TimeSpan.FromSeconds(10);
})
.AddOpenIdConnect(options =>
{
    options.Authority = "myauthserver";
    options.ClientId = "myclient";
    options.ClientSecret = "clientsecret";
    options.ResponseType = OpenIdConnectResponseType.Code;
    options.SaveTokens = true;
    options.UseTokenLifetime = true;
    options.SignedOutCallbackPath = "/Home/Signout";
    options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    
    options.Scope.Add("openid");
    
    options.TokenValidationParameters = new TokenValidationParameters
    {
        NameClaimType = "preferred_username",
        RoleClaimType = "roles"
    };
});
c# .net oauth-2.0 openid-connect
1个回答
0
投票

技术堆栈可以通过两种方式使用。

网站安全

您使用 OIDC 来管理身份系统中的身份验证。网站验证 ID 令牌,将其声明保存到 cookie 并丢弃其他令牌。该 cookie 用作数据凭证,带有您设置的

ExpireTimeSpan
。当网站收到 cookie 时,它会直接与数据库交互。

API 安全

如果您改用 API 安全性,那么浏览器将与其 API 建立会话,由访问令牌和刷新令牌表示。您使用 cookie 将令牌传输到后端。这些是没有过期时间的会话 cookie,因此您无需设置

ExpireTimeSpan
属性。

cookie 永远不会过期,但会在注销或用户关闭浏览器时被删除。当刷新令牌过期且后端无法再从 API 获取数据时,用户会话结束。因此,当此事件发生时,您可以使用 .NET 逻辑触发新的身份验证质询。

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