如何为身份服务器启用内容安全策略?
How to enable content security policy for identity server?
我有一个微前端连接到我的身份服务器。为了让用户访问微前端,用户需要通过这个 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);
}
}
}
尝试使用 iframe IdentityServer 确实是个坏主意,因为这样用户就很难知道他实际登录的位置。
如果您仍想更改它,您需要查看 QuickStart 文件夹中的 SecurityHeadersAttribute.cs 文件,即一个定义了 CSP。
在此文件中,您可以调整发送到浏览器的安全 header。您需要查看 CSP 和 X-Frame-Options header.
我有一个微前端连接到我的身份服务器。为了让用户访问微前端,用户需要通过这个 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);
}
}
}
尝试使用 iframe IdentityServer 确实是个坏主意,因为这样用户就很难知道他实际登录的位置。
如果您仍想更改它,您需要查看 QuickStart 文件夹中的 SecurityHeadersAttribute.cs 文件,即一个定义了 CSP。
在此文件中,您可以调整发送到浏览器的安全 header。您需要查看 CSP 和 X-Frame-Options header.