我有一个非常奇怪的问题,我已经试着调试了一个多星期了。我不知道问题出在哪里。我希望有人在这里可能遇到过同样的问题,并能给我一个想法,什么问题,以及如何解决它。
我是一个asp.net core 2.0应用程序。单独托管时运行良好。
-
主控制器需要身份验证。
-
登录到Identity Server 4。(杂交格兰特型)
-
返回到应用程序获取数据并显示它。
现在,当我尝试将这个应用程序作为插件添加到主应用程序中时,它不起作用。它实际上是循环的。插件以iframe的形式显示在主应用程序中。
<iframe src="https://XXXXX" sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox" width="500" height="500"></iframe>
看着那些木头。我可以看到它被转发到Identity Server日志中,返回到插件视图
OnSignedIn: IsAuthenticated = True
我可以看到插件有一个访问令牌。然后循环开始。它回到身份服务器再次请求访问,整个过程无休止地继续。
我所看到的独立运行和作为插件运行的不同之处在于日志中缺少这一行
Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler[10]
AuthenticationScheme: Cookies signed in.
我还可以在请求的头中看到,Identity Server返回cookie头,并告诉它执行setcookie,但它从未设置。
为什么在iframe中没有设置cookie?
我试过的
options.Cookie.SameSite = SameSiteMode.Lax;
options.Cookie.SecurePolicy = CookieSecurePolicy.None;
内容安全策略头包括Identity Server、插件站点和主要Web应用程序站点。
为什么不把饼干放好?
插件验证代码。
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options =>
{
options.Cookie.SameSite = SameSiteMode.Lax;
options.Cookie.SecurePolicy = CookieSecurePolicy.None;
options.SessionStore = new MemoryCacheTicketStore();
})
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = Configuration["ServiceSettings:IdentityServerEndpoint"];
options.RequireHttpsMetadata = false;
options.ClientId = Configuration["ServiceSettings:ClientId"];
options.ClientSecret = Configuration["ServiceSettings:secret"];
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("profile");
options.Scope.Add("testapi");
});
}
报头
app.Use(async (ctx, next) =>
{
ctx.Response.Headers.Add("Content-Security-Policy", Configuration["DefaultApplicationSettings:ContentSecurityPolicy"]);
await next();
});
设置
"DefaultApplicationSettings": {
"ContentSecurityPolicy": "default-src 'self' plugin webapp; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com/ webapp; font-src 'self' https://fonts.gstatic.com/ webapp; frame-ancestors 'self' webapp" },
由于公司隐私,URL已更改。