2017-12-15 10 views
1

ログインページを作成しています。このアイデアは、ユーザー名とパスワードを取得し、それを使用してAWSコグニートのユーザープールからIDトークンを取得することです。AWSコグニートとJavaScriptを使用したログインの作成

次に、トークンをデータベースに格納し、そのトークンをユーザー名と共にindex.htmlに転送する必要があります。これは、index.htmlが同じIDトークンを使用してAPIゲートウェイへのポストリクエストを行うためにトークンを必要とし、現在ログインしているユーザーを追跡するためにユーザー名を知る必要があるからです。

htmlは、それに転送されたトークンがデータベースのトークンと一致するかどうかをチェックする必要があります。

トークンの有効期限が切れていない場合は、リダイレクトはありません。それ以外の場合は、index.htmlがlogin.htmlにリダイレクトされます。

私の会社は私にバックエンド言語を使用させたくないため、私のバックエンドはAmazon Lambda関数とAPIゲートウェイに完全に依存しています。今、私はラムダ関数がブラウザのクッキーを設定したり、ブラウザのクッキーを読むことができないことを発見しました。

これは、javascriptのクッキー、セッション、およびローカルストレージを使用して、トークンとユーザー名をindex.htmlに転送するという選択肢がありませんでした。しかし、このアプローチは安全ではないと考えられている。

cognitoを使用する安全なログインシステムに関するチュートリアルはありません。

注:他の安全なログインシステムであれば問題ありませんが、他のログイン方法を使用する場合は、ユーザートークンを取得するためにユーザープールにユーザー名とパスワードを渡す必要があります。ユーザー名とパスワードの両方をインデックスに渡して、インデックスがユーザープールにIDトークンを取得してAPIゲートウェイに要求するようにします。

私の質問は、セキュリティを損なうことなく、ログインからインデックスにデータを実際に転送する方法はありますか?トークンを転送するためにラムダを他の方法で使用できますか?

助けてください。前もって感謝します。

+0

"しかし、このアプローチは安全ではないと考えられています。"誰によって?それはどんなやり方でやっているの?トークンはその正確な理由で使用されるため、資格情報を開示することなく認証を許可します。 –

+0

申し訳ありませんが、私はjavascriptクッキーを使用することは、トークンではなく、安全でないと考えられていたことを意味しました。 – Namah

+0

@ Federico klez Culloca:HTTPのみのクッキーをindex.htmlに転送する方法があるかどうかはわかりません。または、セキュリティを損なうことなく、トークンとユーザー名をインデックスに転送できる全く異なる方法がある場合。私はPHPやノードを使うことができないので、javascriptとAWS lambdasしか使えません。 – Namah

答えて

1

ラムダ関数がブラウザのクッキーを設定したり、ブラウザのクッキーを読み込めなかったことがわかりました。

これは厳密には当てはまりません。

Lambda Proxy Integrationを使用すると、ラムダ関数はHTTPリクエストのさまざまな側面を視認し、制御できます。これには、任意のヘッダー(set-cookieを含む)の設定と読み取りが含まれます。実証するために

、あなたはこのように機能を設定し、APIゲートウェイ・トリガー添付することができ、それに(ラムダプロキシの統合で有効):

exports.handler = (event, context, callback) => { 
    var returnobj = { 
     "statusCode": 200, 
     "headers": { 
      "Content-Type": "application/json", "access-control-allow-origin": "*", 
      "Set-Cookie": "testcook=testval; path=/; domain=xxxxxxxxxx.execute-api.us-east-1.amazonaws.com; secure; HttpOnly" 
     }, 
     "body": JSON.stringify({}) 
    }; 
    console.log("headers", event.headers.Cookie); 
    callback(null, returnobj); 
}; 

をこの機能は、ブラウザを尊重しますSet-Cookieヘッダを返し、将来のリクエストと共にこのドメインに送信してください。これをブラウザで2回ヒットすると、ブラウザーから送信され、2回目のリクエストでラムダによって記録されたクッキーが表示されます。

DevTools image showing HttpOnly and Secure

あなたはラムダプロキシの統合を使用することを望んでいない場合、あなたはおそらくまだAPIゲートウェイでmapping part of your Lambda response to a headerことで、これをやってのけることができます。

+0

ありがとうございます@Mike Patrick。私は間違いなくこれを試してみます。私の最初のアプローチはラムダ関数を使うことでした。そう、はい、私は間違いなくこのメソッドを使用します。また、私はこの質問に適切な答えが見つからなかったので、事前にこれを尋ねています。ラムダ関数は、設定した後にこれらのクッキーを読み取ることができますか?それは私の問題を決定的に解決するだろうから。もう一度、本当にありがとう。 – Namah

+1

@Namahはい、できます。ラムダに送られたすべてのクッキーは、 'event.headers.Cookie'で利用可能な' Cookie'ヘッダーにあります。ラムダはこのヘッダーの内容を解析する必要があります。私の例では、ヘッダーには 'testcook = testval'が含まれています。 –

+0

本当にありがとうございます。私はクッキーがサーバーに自動的に送信されていることを聞いたことがありますが、本当のことは見たことがありませんでした。本当にありがとうございます。あなたは私のお尻を保存:) – Namah

関連する問題