Простая аутентификация пользователя Cognito с кодом Grant не работает - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь создать простой статический веб-сайт, который использует AWS Cognito для аутентификации пользователей. Это означает, что я не использую какие-либо расширенные библиотеки, но основываю свой код на примере AWS здесь .

Если я использую поток «токенов» по ​​умолчанию, то этот пример работает для моего домена. Однако в соответствии с рекомендациями самих Amazon в нескольких местах, например, здесь Я хочу использовать поток «предоставления кода», а в качестве состояния в приведенном выше примере я просто раскомментирую строку 221:

auth.useCodeGrantFlow();

Однако из-за этого не удается вызвать функцию onFailure, хотя странным образом я вижу строку URL, содержащую code=xxxxx. Похоже, мне нужно сделать больше шагов, но все примеры, которые я нашел, демонстрируют менее благоприятный «поток токенов».

Это мой конкретный index.html на основе приведенного выше примера:

<code><!DOCTYPE html>
<html lang="en-US">
<head>
    <title>Cognito Auth JS SDK Sample</title>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="stylesheets/styleSheetStart.css">
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
    <script src="dist/amazon-cognito-auth.min.js"></script>
    <!-- To enable the advanced security feature -->
    <!-- <script src="https://amazon-cognito-assets.<region>.amazoncognito.com/amazon-cognito-advanced-security-data.min.js"> 
    </script> -->
    <!-- E.g. -->
    <!-- <script src="https://amazon-cognito-assets.us-east-1.amazoncognito.com/amazon-cognito-advanced-security-data.min.js"> 
    </script> -->
</head>

<body  onload="onLoad()">
    <ul>
      <li><a href="https://aws.amazon.com/cognito/" target="_blank"
       title="Go to AWS Cognito Console">Cognito Console</a></li>
      <li><a href="http://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html"
       target="_blank" title="See Cognito developer docs">Docs</a> 
     </li>
    </ul>

    <h1>
        <a href="http://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html" target="_blank">
            <img src="img/MobileServices_AmazonCognito.png" alt="Amazon Cognito" title="Amazon Cognito"
       style="width:144px;height:144px;"></a><br>
    Amazon Cognito Auth Demo
    </h1>
    <!--removed for brevity -->
   <div><br></div>
   <div>
       <p id="statusNotAuth" title="Status">
          Sign-In to Continue
       </p>
       <p id="statusAuth" title="Status">
          You have Signed-In
       </p>
   </div>

<div class="tabsWell">
    <div id="startButtons">
        <div class="button">
            <a class="nav-tabs" id="signInButton" href="javascript:void(0)" title="Sign in">Sign In</a>
        </div>
    </div>
    <div class="tab-content">
        <div class="tab-pane" id="userdetails">
            <p class="text-icon" title="Minimize" id="tabIcon" onclick="toggleTab('usertab');">_</p>
            <br>
            <h2 id="usertabtitle">Tokens</h2>
            <div class="user-form" id="usertab">
                <pre id="idtoken"> ... 
 ... 
 ... 
// Операции при загрузке веб-страницы. function onLoad () { var i, элементы, вкладки; items = document.getElementsByClassName ("tab-pane"); для (i = 0; i ', // Ваш идентификатор клиента здесь AppWebDomain: '', // Исключить часть "https://". TokenScopesArray: [], // как ['openid', 'email', 'phone'] ...RedirectUriSignIn: '<домен удален> /index.html', RedirectUriSignOut: '<домен удален> /index.html' }; var auth = new AmazonCognitoIdentity.CognitoAuth (authData); // Вы также можете установить параметр состояния - мне нужно установить это? auth.setState ( 'ABCDXYZ'); auth.userhandler = { onSuccess: функция (результат) { alert («Войти в систему»); showSignedIn (результат); }, onFailure: function (err) { alert («Ошибка!» + ошибка); } }; // типом ответа по умолчанию является «токен», раскомментируйте следующую строку, чтобы сделать его «кодом». auth.useCodeGrantFlow (); вернуть авторизацию; }

В инструментах разработчика я вижу вызов https://<domain-name-removed>/oauth2/token, но похоже, что он возвращается с ошибкой 400. Текст ответа "error":"invalid_client".

Есть ли какая-то дополнительная конфигурация, которую мне нужно сделать, или как предложено в документации AWS для потока предоставления кода авторизации, мне нужно реализовать дополнительный код BE? Я чувствую, что коду примера не хватает полного описания потока предоставления кода. Согласно

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Если я правильно понимаю ваш вариант использования, вы не должны использовать для этого секрет клиента приложения. Пример AWS действительно верный, код , который вы получаете в URL, предназначен для использования в другом запросе в процессе получения действительного кода aka access_token .

0 голосов
/ 10 ноября 2018

Оказывается, когда я создал клиент приложения для пула пользователей, я создал его с секретным ключом. Этот ключ должен быть возвращен в заголовке как часть процесса аутентификации, который я не делал; пример aws не показывает, как это достигается. Вместо указывается направление для создания клиента приложения без секретного ключа приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...