如何解决如何为身份服务器启用内容安全策略?
我有一个连接到身份服务器的微型前端。为了使用户能够访问微前端,需要通过此ID服务器对用户进行身份验证。微型前端需要嵌入到我的主应用程序的iframe中,但是由于该微型前端需要ID服务器,因此控制台上出现错误。在嵌入此微型前端之前,一切工作都很好,但是一旦它进入iframe,我就会遇到这个问题。
Refused to frame 'https://localhost:44300/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'none'".
我尝试将其包含在身份服务器的web.config文件中,导致控制台上出现上述错误。
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Content-Security-Policy" value="frame-ancestors ''" />
</customHeaders>
</httpProtocol>
</system.webServer>
似乎ID服务器不允许将其内容嵌入到iframe中。这可能不是一个好习惯,但是根据我的要求,我想知道如何启用它。
更新
在这里定义csp
public override void OnResultExecuting(ResultExecutingContext context)
{
var result = context.Result;
if (result is ViewResult)
{
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
if (!context.HttpContext.Response.Headers.ContainsKey("X-Content-Type-Options"))
{
context.HttpContext.Response.Headers.Add("X-Content-Type-Options","nosniff");
}
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/x-frame-options
if (!context.HttpContext.Response.Headers.ContainsKey("x-frame-options"))
{
context.HttpContext.Response.Headers.Add("x-frame-options","SAMEORIGIN");
}
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
var csp = "default-src 'self'; object-src 'none'; frame-ancestors 'none'; sandBox allow-forms allow-same-origin allow-scripts; base-uri 'self';";
// also consider adding upgrade-insecure-requests once you have HTTPS in place for production
//csp += "upgrade-insecure-requests;";
// also an example if you need client images to be displayed from twitter
// csp += "img-src 'self' https://pbs.twimg.com;";
// once for standards compliant browsers
if (!context.HttpContext.Response.Headers.ContainsKey("Content-Security-Policy"))
{
context.HttpContext.Response.Headers.Add("Content-Security-Policy",csp);
}
// and once again for IE
if (!context.HttpContext.Response.Headers.ContainsKey("X-Content-Security-Policy"))
{
context.HttpContext.Response.Headers.Add("X-Content-Security-Policy",csp);
}
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
var referrer_policy = "no-referrer";
if (!context.HttpContext.Response.Headers.ContainsKey("Referrer-Policy"))
{
context.HttpContext.Response.Headers.Add("Referrer-Policy",referrer_policy);
}
}
}
解决方法
尝试对iServer IdentityServer进行内嵌操作确实是一个坏主意,因为这样用户很难知道自己实际登录的位置。
如果仍然要更改它,则需要查看 QuickStart 文件夹中的 SecurityHeadersAttribute.cs 文件,该文件定义了CSP。
在此文件中,您可以调整发送到浏览器的安全标头。您需要查看CSP和X-Frame-Options标头。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。