Вот моя попытка объяснить эти варианты. Перед этим я хотел бы кратко упомянуть о Oauth2 , который является протоколом, на котором основан AWS Cognito.
В контексте AWS Cognito сам Cognito является сервером аутентификации (OAuth) , а также сервером ресурсов (поскольку мы создаем пользователей в пуле пользователей Cognito), и ваше приложение будет быть клиентом (который отправляет запрос аутентификации). Клиент должен сначала зарегистрироваться на сервере OAuth - это то, что делается в разделе «Клиенты приложений» в Cognito.
Рекомендованный поток OAuth2 - Код авторизации Предоставить поток . В этом потоке
i) Клиент отправляет имя пользователя / пароль на OAuth-сервер.
ii) Сервер OAuth проверяет и вызывает клиент с помощью кода авторизации .
iii) Клиент снова отправляет этот код обратно на сервер OAuth
iv) Сервер OAuth отправляет токены Клиенту.
blockquote>Пожалуйста, прочитайте вышеупомянутую связанную статью для получения дополнительной информации об OAuth2.
Теперь объясним параметры в настройках клиента Cognito App:
1. Включите API входа для аутентификации на основе сервера
С помощью этой опции ваше клиентское приложение может напрямую получать токены , не имея дополнительного шага для первого получения кода авторизации.
Существуют API Cognito, такие как AdminInitiateAuth, Admin- *, которые делают это. Однако эти API требуют учетных данных администратора AWS. Следовательно, обычно эти вызовы выполняются внутренним сервером клиентского приложения. Внешний интерфейс может передать имя пользователя / пароль бэкэнду, а внутренний сервер может обмениваться данными с AWS Cognito и авторизовать пользователя.
2. Разрешить только пользовательскую аутентификацию
Здесь вы не используете поток предоставления кода авторизации, предоставленный OAuth. Вместо этого вы можете определить свои собственные шаги и проблемы. Ваше клиентское приложение может задать секретный вопрос и т. Д. Перед аутентификацией и выдачей токенов.
3. Включить поток имени пользователя и пароля (не SRP) для аутентификации на основе приложений
Это наименее безопасный поток. Это пропускает часть возврата кода авторизации и напрямую возвращает токены обратно клиенту.
1123 Надеюсь, это объяснит.
Удалось найти способ обойти это, почти случайно.
Содержимое, загруженное в мой RichTextBox, просто сохраняется (или вводится) в виде простой строки.
Вы пытались обработать событие MouseLeftButtonDown вместо события Click?
Если Вы хотите повернуться Стрелка в , Ручной курсор всегда без навигации системы по умолчанию , ниже является подходом.
<RichTextBox>
<RichTextBox.Resources>
<Style TargetType="{x:Type Hyperlink}">
<EventSetter Event="MouseEnter" Handler="Hyperlink_OnMouseEnter"/>
</Style>
</RichTextBox.Resources>
</RichTextBox>
private void Hyperlink_OnMouseEnter(object sender, MouseEventArgs e)
{
var hyperlink = (Hyperlink)sender;
hyperlink.ForceCursor = true;
hyperlink.Cursor = Cursors.Hand;
}