我已经使用Microsoft.AspNetCore.Identity和外部登录名以及Angular 8前端构建了一个ASP.NET Core网站。这基本上是我控制器中的代码:
[Controller]
[Route("web/[controller]")]
public class AccountController : Controller
{
// GET: web/Account/connect/{provider}
[AllowAnonymous]
[HttpGet("connect/{provider}", Name = "web-account-external-connect-challenge")]
public async Task<ActionResult> ExternalLogin(string provider)
{
var redirectUrl = Url.Action(nameof(ExternalLoginCallback), "Account", new { provider });
var properties = signin_manager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
return Challenge(properties, provider);
}
// GET: web/Account/connect/{provider}/callback
[HttpGet("connect/{provider}/callback", Name = "web-account-external-connect-callback")]
public async Task<ActionResult> ExternalLoginCallback([FromRoute]string provider)
{
...
}
}
因此,访问/ web / Account / connect / Facebook时,您应该获得Facebook登录页面。成功登录后,FB将重定向到ExternalLoginCallback,应用程序将处理登录(创建帐户,登录)。
[现在看来我被CORB打了(以前从未听说过)。我知道CORS,但是CORB对我来说是新的。
您可以窥见动作here。
跨源读取阻止(CORB)阻止了跨源响应https://www.facebook.com/login.php?skip_api_login=1&api_key=...&kid_directed_site=0&app_id=...&signed_next=1&next=...&display=page&locale=nl_NL&pl_dbl=0MIME类型为text / html。看到https://www.chromestatus.com/feature/5629709824032768更多详细信息。
该应用程序始终显示NotFoundComponent,但是只有在按ctrl + F5(清除缓存)后,Facebook登录页面才会出现。现在缓存清除与它无关,问题绝对是CORB。
return Challenge()似乎是立即从Facebook渲染登录页面,而我自己的URL上没有iframe。
我不知道如何解决该问题。是否应在响应中添加Access-Control-Allow-Origin
标头,以允许我的应用程序加载/重定向到Facebook / Twitter / Google / Microsoft登录页面?但是我不打算肯定允许所有起源...
PS。它在localhost / development上运行良好。
信息:
版本信息:
编辑:
[好,当我尝试浏览我的站点地图:https://mintplayer.com/Sitemap时,我得到相同的结果,相同的行为,并带有以下控制台警告:
资源解释为样式表,但以MIME类型传输application / xml:“ https://mintplayer.com/assets/sitemap.xsl”。
[好,所以经过一番挖掘之后,看来请求的资源(在我的情况下是/ web / Account / connect / Facebook,...,/ signin-facebook,...和/ Sitemap)被我的服务人员缓存的事实。我这样更新了ngsw-config.json:
{
"$schema": "./node_modules/@angular/service-worker/config/schema.json",
"index": "/index.html",
"version": 6,
"assetGroups": [
...
],
"dataGroups": [
{
/* /web/... can be cached, /web/Account/... cannot */
"name": "web",
"urls": [ "/web", "!/web/Account" ],
"cacheConfig": {
"maxSize": 20,
"maxAge": "1d",
"strategy": "freshness"
}
},
{
/* /web/Account/... cannot be cached */
"name": "account",
"urls": [ "/web/Account" ],
"cacheConfig": {
"maxSize": 0,
"maxAge": "0u",
"strategy": "freshness"
}
},
{
/* /signin-** (defined by Identity) cannot be cached */
"name": "external-callback",
"urls": [ "/signin-microsoft", "/signin-google", "/signin-facebook", "/signin-twitter" ],
"cacheConfig": {
"maxSize": 0,
"maxAge": "0u",
"strategy": "freshness"
}
},
{
/* /Sitemap cannot be cached */
"name": "sitemap",
"urls": [ "/Sitemap" ],
"cacheConfig": {
"maxSize": 0,
"maxAge": "0u",
"strategy": "freshness"
}
}
],
"cacheConfig": {
"strategy": "freshness"
}
}