我有一个使用oidc-client w / IdentityServer4托管在两个不同域上的Angular SPA。在浏览器设置中阻止了第三方Cookie的用户陷入了重定向循环。
重定向循环的根源似乎是CheckSession IFrame无法读取idsrv.session cookie值,该值通过启动静默刷新循环在此处生成新的哈希值。
这是SPA的UserManager配置:
authority: oidcAuthInfo.authority,
client_id: oidcAuthInfo.clientId,
redirect_uri: ${baseHref}auth-callback,
silent_redirect_uri: ${baseHref}silent-refresh.html,
post_logout_redirect_uri: ${baseHref}welcome,
response_type: 'code',
scope: openid profile ${oidcAuthInfo.apiName},
filterProtocolClaims: true,
loadUserInfo: true,
revokeAccessTokenOnSignout: true,
automaticSilentRenew: true
是否有其他登录/流程或变通办法,以允许浏览器阻止第三方Cookie?
答案 0 :(得分:0)
我不知道您的问题的确切解决方案。但通常,身份服务器位于主要站点的子域之内。
login.microsoft.com account.google.com
因此,将Identity Server置于子域下会使事情变得简单得多。
答案 1 :(得分:0)
我正在经历完全相同的问题,经过大量研究,唯一可行的解决方案是在Startup.cs的UseCsp中添加FrameAncestors。我只用虚拟值使它工作:
branch.UseCsp(options => options
.DefaultSources(s => s.Self())
.ConnectSources(s => s.Self())
.ScriptSources(s => s.Self().UnsafeInline().UnsafeEval())
.StyleSources(s => s.Self().UnsafeInline())
.ImageSources(s => s.Self().CustomSources("data:"))
.FontSources(s => s.Self())
.FrameAncestors(s => s.Self().CustomSources("dummy"))
.ReportUris(r =>
r.Uris("https://my.reporturi.io/r/default/csp/enforce")));
基本上现在就扔
“拒绝在框架中显示'https://localhost:44326/connect/checksession',因为祖先违反了以下内容安全策略指令:“ frame-ancestors'self'dummy”。”
因此无限循环消失了,但是出现了以上错误。 有什么想法也要解决吗?