IdentityServer4非交互认证流无法生成idsrv等cookie相关问题咨询
1 是否为IS4标准行为
该表现属于Identity Server 4的标准设计。idsrv和idsrv.session是IS4内置的会话Cookie,仅在用户完成IS4交互登录流程时,由默认的身份校验逻辑自动签发,核心作用是维护用户在IS4站点的会话状态,支撑SSO单点登录、全局登出等会话相关能力。
非交互流默认被定义为无会话的API级验证场景,不会触发Cookie签发逻辑,因此认证成功后也不会生成对应Cookie。
2 保留默认实现的解决方案
你当前的自定义授权场景已经通过客户端JWT拿到了完整的用户身份信息,只需要手动触发IS4的会话登录逻辑即可生成对应Cookie,无需修改默认Cookie配置:
- 首先在你的自定义JWT校验逻辑中,构造符合IS4规范的
ClaimsPrincipal对象,需要包含sub、idp、name等交互流默认生成的必要声明,和默认实现的声明结构保持一致 - 调用ASP.NET Core认证扩展方法
HttpContext.SignInAsync(IdentityConstants.ApplicationScheme, claimsPrincipal, authenticationProperties),其中IdentityConstants.ApplicationScheme就是IS4默认绑定idsrvCookie的认证方案,authenticationProperties可直接沿用IS4的默认配置(会话有效期、持久化策略等) idsrv.sessionCookie无需手动生成,会由IS4的会话中间件在上述登录方法调用后自动签发
注意:该逻辑必须运行在IS4站点的上下文内,Cookie会写入IS4的所属域名下。如果客户端和IS4跨域,需要提前确认Cookie的SameSite、Domain、Secure属性配置符合浏览器跨域Cookie规则,避免Cookie被拦截无法写入。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

