Я пытаюсь заставить свой веб-сайт S3, который находится за облачным дистрибутивом, работать с облачным фронтом. Если я тестирую свое приложение Angular локально, и у меня есть URL-адрес обратного вызова и URL-адрес выхода, установленные на localhost:4200
с косой чертой в конце
затем в моем приложении, когда я нажимаю «Войти», он переходит в пользовательский интерфейс Cognito Hosted и перенаправляет после входа в мое приложение, и я могу успешно пройти аутентификацию. Если я обновлю его до своего облачного дистрибутива
и развернуть мое угловое приложение с URL-адресом облачного фронта, тогда я получаю
https://<cognito_url>.us-east-1.amazoncognito.com/error?error=redirect_mismatch&client_id=<client_id>
с 400
на вкладке сети.
Итак, вкратце, он работает локально с localhost: 4200, но не с URL-адресом Cloudfront. Что я делаю не так? Я ценю любую помощь!
кнопка входа в угловой
login() {
window.location.href = `https://<cognito_url>.auth.us-east-1.amazoncognito.com/login?client_id=<client_id>&response_type=code&scope=email+openid+profile&redirect_uri=<cloudfront_url>.cloudfront.net/`;
}
auth.service.ts
Auth: {
region: 'us-east-1',
userPoolId: environment.cognitoUserPoolId,
userPoolWebClientId: environment.cognitoAppClientId,
mandatorySignIn: false,
oauth: {
domain: '<cognito_url>.auth.us-east-1.amazoncognito.com',
scope: ['email', 'profile', 'openid'],
redirectSignIn: 'https://<cloudfront_url>.cloudfront.net/',
redirectSignOut: 'https://<cloudfront_url>.cloudfront.net/',
responseType: 'code'
}
}
});
@KevinHakanson Я обновил свой пост и удалил часть о перенаправлении на ведро s3, потому что на следующий день я попытался воссоздать облачный дистрибутив, применил новую политику ведра, чтобы указать на новый дистрибутив, обновил пользовательские страницы ошибок, и во второй раз это не помогло. показывать ведро s3 в перенаправлении при нажатии на вход из облака (не локально). Тем не менее, у него все еще есть та же самая ошибка несоответствия перенаправления, но отображение корзины s3 больше не имеет значения. Так что та же проблема все еще продолжается.
В вашей локальной среде вы правильно перенаправляетесь на перенаправление и получаете код авторизации или его эквивалент. Однако код не перенаправляет вас правильно, когда доступ к вашему сайту осуществляется через облачный фронт?
Вам необходимо передать полный URI перенаправления (схема + домен + путь) при переходе к размещенному пользовательскому интерфейсу.
login() {
window.location.href = `https://<cognito_url>.auth.us-east-1.amazoncognito.com/login?client_id=<client_id>&response_type=code&scope=email+openid+profile&redirect_uri=https://<cloudfront_url>.cloudfront.net/`;
}
По-видимому, я использовал старый URL-адрес облачного дистрибутива в своей ссылке для входа. Это странно, потому что я знаю, что пробовал ту же настройку с предыдущими дистрибутивами, которые я сделал, и это не сработало. После изменения URL-адреса распространения облака я обновил некоторые пользовательские страницы ошибок, чтобы перенаправить сайт, так что, возможно, это разница, но теперь у меня все работает. Я был очень сбит с толку, когда вы разместили ту же ссылку для входа, что и у меня, но это заставило меня очень внимательно посмотреть на нее, и я заметил неправильный URL-адрес облачного фронта в настоящее время. Я обновил его, и теперь он работает. Так что спасибо!
Взгляните на stackoverflow.com/questions/58477877/… - Я подозреваю, что в правилах перенаправления S3 отсутствует HostName дистрибутива CloudFront: docs.aws.amazon.com/AmazonS3/latest/userguide/…