Как избежать проблемы CORS при использовании OpenID Connect (AWS Cognito)? - PullRequest
0 голосов
/ 28 июня 2019

Я настраиваю веб-страницу, используя Vue.js вместе с базовым веб-API .net. Интерфейс и Backend полностью разделены.

Я настроил свой API для использования openid connect с «Предоставлением кода авторизации» в AWS Cognito для аутентификации следующим образом:

services.AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCookie()
        .AddOpenIdConnect(options =>
        {
            options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.ResponseType = OpenIdConnectResponseType.Code;
            options.MetadataAddress = cognitoSettings.AuthorityUrl;
            options.ClientId = cognitoSettings.ClientId;
            options.SaveTokens = false;
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true
            };
        });

Это нормально работает в браузере, когда я запрашиваю данные с [Авторизованного] контроллера, я перенаправляюсь на страницу входа в Cognito, и после того, как я ввел свои учетные данные, я вижу авторизованные данные.

Однако, если я запрашиваю тот же ресурс, используя ajax (axios) внутри моего Vue-App, бэкэнд возвращает 302, и вызов ajax завершается неудачно из-за Cross Origin Policy. (Поскольку Cognito Login находится в другом домене, чем мой бэкэнд)

Итак, мои вопросы: как мне заставить этот сценарий работать?

  • Нужно ли перенести аутентификацию openid в мой интерфейс чтобы сделать эту работу, и пусть бэкэнд использует только токены Bearer для разрешение? Но тогда мне нужна вся информация openid, как имя или адрес электронной почты находится в бэкэнде, а не в моем Vue-приложении. Как я могу получить их тогда?

  • Можно ли изменить код ответа с 302 на 401 так что интерфейс может реагировать на несанкционированный вызов и перенаправлять пользователя? Но откуда я могу получить URL для входа, так как все настройки (client_id, metadataaddress) настроено в моем бэкэнде.

1 Ответ

0 голосов
/ 02 июля 2019

пара указателей для вас: * Ваш API не должен использовать openid connect - он должен просто проверять токены доступа * Ваш SPA должен реализовать Open Id Connect с использованием библиотеки Javascript

У меня есть пример пользовательского интерфейса Cognito с этой архитектурой в моем блоге, в который вы можете войти, перейдите по этой ссылке: https://authguidance.com/home/code-samples-quickstart/

В блоге есть несколько связанных рецензий и примеров кода - возможно, посмотрите первый пример SPA и пример .Net Core

...