我已经使用 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 对我来说是新的。
您可以在这里一窥动作。
- 请打开一个访客窗口(为了不自动登录)
- 按 F12 打开开发者工具
- 导航到https://mintplayer.com/account/login
- 单击社交登录按钮,弹出窗口出现但带有角度应用程序的 404 页面(这也是误导)
- 按 F12 打开弹出窗口的开发人员工具
- 出现以下消息
跨域读取阻止 (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=0 ,MIME 类型为 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 上运行良好。
信息:
版本信息:
- ASP.NET 核心:3.1
- Microsoft.AspNetCore.Identity.EntityFrameworkCore:3.1.1
- Microsoft.AspNetCore.Authentication.MicrosoftAccount:3.1.1
- @角/核心:~8.1.1
- @角/pwa:^0.803.23
编辑:
好的,当我尝试浏览我的站点地图时:https ://mintplayer.com/Sitemap我得到了相同的结果,相同的行为与以下控制台警告:
资源解释为样式表,但使用 MIME 类型 application/xml 传输:“ https://mintplayer.com/assets/sitemap.xsl ”。