Я настраиваю веб-страницу, используя 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)
настроено в моем бэкэнде.