阻止第三方Cookie时,Angular SPA重定向登录循环

时间:2019-11-22 21:13:23

标签: angular identityserver4 oidc-client-js

我有一个使用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?

2 个答案:

答案 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”。”

因此无限循环消失了,但是出现了以上错误。 有什么想法也要解决吗?