我需要cookies吗

Do I need cookies

提问人:Merijn 提问时间:11/11/2023 更新时间:11/23/2023 访问量:50

问:

我的情况:

我正在使用Duende身份服务器在浏览器扩展程序和移动应用程序中使用授权类型“authorization_code”进行身份验证。对于身份验证,我的客户端被重定向到我们的 identityserver 实现,这是一个受 Duende 快速入门示例启发的 AspNet 核心应用程序。我的客户端是“多身份”的,这意味着用户可以向客户端添加多个身份,并通过按一下按钮在身份之间切换。

这一切都很好,但是......

在身份服务器上登录应仅允许客户端使用访问令牌等访问我们的后端,但不应使用户在身份服务器上保持登录状态。

由于 AspNet 核心使用的身份验证 cookie,我认为上次登录的用户在访问身份服务器时会保持登录状态。这是一个潜在的安全问题,但也会让用户感到困惑,因为由于我们软件的多身份性质,登录的身份可能不是用户期望的身份。因此,在允许用户在身份服务器上执行帐户操作之前,我们首先注销该用户,以便用户可以在预期帐户下显式登录。这是可行的,但并不像它应该的那样方便。

所以我的问题是,

我们是否可以不使用此类 cookie,让身份服务器仅执行密码验证(包括重定向到外部登录提供商)并处理 OIDC(访问/身份/引用/刷新)令牌?对于帐户操作,用户通过 Web 浏览器直接在身份服务器上登录。

ASP.NET 标识 duende-identity-server

评论


答:

0赞 Tore Nestenius 11/21/2023 #1

您可以强制 IdentityServer 始终要求用户进行身份验证,即使他仍然与 IdentityServer 进行有效会话,但将 AddOpenIDConnect 中的 prompt 参数设置为登录

请参阅此处的文档 https://docs.duendesoftware.com/identityserver/v6/reference/endpoints/authorize/

).AddOpenIdConnect(options =>
{
    //...
    options.Prompt = "login";
});

身份验证握手期间需要 Cookie,但之后就不需要 Cookie。您也可以给 IdentityServer sesion cookie 一个较短的生存期。

通常,在客户端完成时,OpenIDConnect 处理程序会要求 cookie 处理程序执行用户的登录。(OpenIDConnect 只处理质询部分)。

如果您根本不想使用 cookie,那么我在这里写了一篇关于博客的新 BearerToken 处理程序 https://nestenius.se/2023/08/29/bearertoken-the-new-authentication-handler-in-net-8/

结论是,用户登录后,您根本不需要 cookie,但不知何故,您确实希望记住用户。

评论

0赞 Merijn 11/23/2023
感谢您的帮助。但是,我的观点是,在我登录我的身份服务器后,由于身份验证 cookie asp.net,我保持身份验证状态。对于单个身份,这没什么大不了的,但这是多个身份的问题,因为核心只保留 1 个会话 asp.net 因此。由于在登录后,我的客户端从身份服务器接收访问/刷新令牌,因此我认为我不需要 asp.net 会话。所以我的问题是我是否可以使用“authorization_code”登录并以正常方式从身份服务器接收令牌,但没有 asp.net 会话 cookie。
0赞 Tore Nestenius 11/23/2023
查看我更新的答案
0赞 Merijn 11/25/2023
感谢您的这些重要提示!我想,这正是我一直在寻找的。会尽快尝试一下。