在 Azure OIDC 注销后,应该将啥内容安全策略标头值重定向回应用程序

Posted

技术标签:

【中文标题】在 Azure OIDC 注销后,应该将啥内容安全策略标头值重定向回应用程序【英文标题】:What should content security policy header value to redirect back to applcation, after Azure OIDC logout在 Azure OIDC 注销后,应该将什么内容安全策略标头值重定向回应用程序 【发布时间】:2021-12-01 06:58:13 【问题描述】:

我有 Web 应用程序,使用 Azure OIDC 登录。将网页的响应标头设置为

content-security-policy: frame-ancestors 'self' https://login.microsoftonline.com;

使用上述标头,在 Azure 注销成功后,浏览器仅停留在 Azure 页面中,不会重定向回原始应用程序。

Azure 成功注销网址:https://login.microsoftonline.com/XXXXXXX-XXXX-XXXX/oauth2%2Flogout?post_logout_redirect_uri=https%3A%2F%2Fwww2.test.me.net%2F%23%2Fsignout

但没有

content-security-policy: frame-ancestors 'self' https://login.microsoftonline.com;

在网页的响应标头中,它工作正常, 那么与 header 一起使用的 header 值应该是什么

【问题讨论】:

【参考方案1】:

• 根据 Azure OIDC 应用程序身份验证配置和用户流结构,标头值配置为根据为 Azure OIDC 应用程序定义的策略将浏览器中的用户流重定向到特定页面。因此,根据您为 Azure OIDC 应用程序设计的策略,成功注销操作的内容安全策略标头应该是初始应用程序登录页面或主页。

• 请在 Azure OIDC Web 应用中查找用于注销步骤的示例内容安全策略标头:-

   ‘ content-security-policy: frame-ancestors script-src ‘self’ 
      https://<webappname>.azurewebsites.net; ’

另外,请注意,如果内容安全策略的 logout 标头中没有说明网站,则应用 default-src 标头,它将浏览器中的应用程序重定向到主应用程序主页,并作为其他 CSP 的后备fetch 指令与 default-src 指令一样,说明了应用程序网页的重定向 URI。

• 因此,标头值应该与上面提到的一样,方法是用您的应用程序页面 URI 替换其中所述的响应 URI 或链接。

请找到以下链接以获取更多信息:-

https://docs.microsoft.com/en-us/azure/frontdoor/front-door-security-headers

https://docs.microsoft.com/en-us/azure/active-directory-b2c/openid-connect

【讨论】:

【参考方案2】:

'self' 总是从浏览器地址栏的 Url 发起(通过 scheme://hostname:port_number 的元组)。 看起来'self' 令牌不涵盖www2.test.me.net 源,可能是因为地址中的主页Url 与www2.test.me.net 不匹配。

如果您在 iframe 中执行注销重定向,则必须将确切的重定向位置 (https://www2.test.me.net) 添加到 frame-ancestors:

content-security-policy: frame-ancestors 'self' https://login.microsoftonline.com https://www2.test.me.net;

因为重定向后,框架实际上会嵌入到带有https://www2.test.me.net Url的页面中。

【讨论】:

这没有成功,一个 x-frame-options 已设置为 samorigin,这是否会造成问题,建议我也为此提供可能的价值,它会从我的应用程序重定向到登录.microsot.com 并且必须从那里重定向回我的应用程序,所以我们是否需要替换框架祖先,请就此提出建议。如果内容安全政策被取消,一切都很好, (1) Content-Security-Policy: frame-ancestors 在除 Safari 之外的所有浏览器中覆盖 X-Frame-Optiions: samorigin。另外,当您删除 CSP 时一切正常,因此 XFO 与它无关。不过这很奇怪。 (2) 您能否在浏览器控制台中显示有关阻止的 CSP 消息 - 应该有一个被阻止的 Url。

以上是关于在 Azure OIDC 注销后,应该将啥内容安全策略标头值重定向回应用程序的主要内容,如果未能解决你的问题,请参考以下文章

angular-oauth2-oidc 中是不是有静默注销选项?

在 Angular 中使用 IdentityServer4 + oidc-client-js 在空闲时注销用户

钥匙斗篷 |使用 Spring Security 的 OIDC 反向通道(单)注销

带有IdentityServer3的Oidc-client - Angular2,如何正确注销和登录

滑动刷新令牌生存期过期后注销用户

我应该将啥作为参数传递给期望 NSError** 的方法?