return Challenge () заблокирован CORB (ASP. NET Core) - PullRequest
0 голосов
/ 03 февраля 2020

Я создал основной веб-сайт ASP. NET с Microsoft.AspNetCore.Identity и внешним логином, а также с интерфейсом Angular 8. Это в основном код моего контроллера:

[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, и приложение будет обрабатывать вход в систему (создать учетную запись, войти).

Last warning notifies about CORB

Теперь кажется, что я ' Я поражен CORB (никогда не слышал об этом раньше). Я знаю о CORS, но CORB является новым для меня.

Вы можете увидеть действие здесь .

  • Открыть гостевое окно пожалуйста (для автоматического входа в систему)
  • Нажмите F12, чтобы открыть инструменты разработчика
  • Перейдите к https://mintplayer.com/account/login
  • Нажмите на кнопка входа в социальную сеть, всплывающее окно появляется, но со страницей 404 приложения angular (это также вводит в заблуждение)
  • Нажмите 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 / html. Подробнее см. https://www.chromestatus.com/feature/5629709824032768.

Приложение всегда показывает NotFoundComponent, но только после нажатия ctrl + F5 (очистка кэша) открывается страница входа в Facebook. Теперь очистка кеша не имеет к этому никакого отношения, проблема определенно в КОРБЕ.

return Challenge (), по-видимому, отображает страницу входа в Facebook прямо сейчас, без фрейма в моем собственном URL.

The response of the same request in Postman

Я не понимаю, как мне обойти эту проблему. Должен ли я добавить в ответ заголовок 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
  • @ angular / core: ~ 8.1.1
  • @ angular / pwa: ^ 0.803.23

Редактировать:

Хорошо, когда я пытаюсь просмотреть мою карту сайта: https://mintplayer.com/Sitemap Я получаю тот же результат, такое же поведение с следующее предупреждение консоли:

Ресурс интерпретируется как таблица стилей, но передается с приложением типа MIME / xml: "https://mintplayer.com/assets/sitemap.xsl".

1 Ответ

0 голосов
/ 03 февраля 2020

Хорошо, так что после небольшого перебора выясняется, что запрошенные ресурсы (в моем случае / 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"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...