2016-01-08 22 views
5

私はExpressアプリケーションのセットアップをしており、トークンの保管に関するアドバイスが必要です。ノードエクスプレス - 認証トークンの保存と取得

ユーザーアカウントを認証した後、OAuth 2サーバーからアクセストークンを受け取りました。このトークンは、その後のAPIリクエストに使用する必要があります。

私はクライアントからトークンの値を隠したいと思っています。これを行う方法の1つは、トークンを暗号化されたクッキーに保存することだと思いますので、さらにリクエストするとミドルウェアとクッキーは、サーバ側に保存されたトークンの検索に使用され、その後、実際のAPIエンドポイントへの進行中のリクエストのヘッダ値として使用されます。

誰かが実際に既にこの質問をしています - How to store an auth token in an Angular appこれは私のアプリケーションではうまく動作していますが、アンサーサービスを使用することについての答えがありますが、私はこれをやりたいとは確信していません。クライアント側のコードがトークンについて知る必要がないように、すべてExpressで処理することができます.APIサーバーが返すエラーだけです。

だから私は、私は必要だと思うの流れの概要:

  • ユーザーが2サーバーが返すトークン
  • トークンは、どこかにエクスプレスで保存された種類
  • のIDをキーとされるにアクセス、ログイン資格情報
  • のOAuthを提出
  • クッキーが生成され、クライアントに応答して返送されます。 Cookieにはおそらくトークン値がエンコードされていますかあるいは、Expressミドルウェアコンポーネントに格納されているトークン値のIDですか?
  • クライアントは、Expressルートミドルウェアがピックアップするapi要求を行います。
  • Expressはクッキーの存在をチェックし、トークン値をデコードするか、何らかの方法でストレージ機構サーバー側から取得します。急行と、最終的なAPIエンドポイント

間のヘッダは、このちょっとの事を扱うことそこにすでにミドルウェアは、おそらくありますよう

  • トークン値は、その後使用されている、私はすでに私がかもしれちょっとの事であるように思われPassportJSを見てきました使用したいと思いますが、私が(パスワードの付与)に対して働いているサーバー上のOAuth2トークンフローを処理し、リダイレクトログインOAuthフローに適しているようです。

    私は確かにエクスプレスでトークンの値を保存する必要があるので、何らかの形式の記憶装置(メモリにはないと思います)。

    私はかなり新しくExpressですので、これにアプローチする方法についてのアドバイスやアドバイスをいただければ幸いです。これを行うには

    おかげ

  • +0

    Oauth2サーバーからトークンを受け取ると、ユーザー側で保存できます。 cookieまたはlocalstorage HTML 5を使用することができます。 – trquoccuong

    +0

    クッキーのアプローチは私が考えているとおりですが、トークンの値をクライアントにエンコードする必要があります。最後の終点。 – mindparse

    答えて

    5

    最も安全な方法は、あなたが説明しただけのようです:

    • は、いくつかのサードパーティのサービス(グーグル、Facebookの、何でも)からのOAuthトークンを取得します。
    • Expressを使用してCookieを作成し、そのトークンをCookieに格納します。これを行うときにsecurehttpOnlyのCookieフラグも設定することを忘れないでください。これにより、クライアントサイドのJavascriptコードやSSL以外の接続でCookieを読み取ることができなくなります。
    • ユーザーがサイトにリクエストするたびに、そのクッキーをExpressのミドルウェアで読み取って、必要なAPI呼び出しをサードパーティのサービスに使用することができます。

    あなたのサービスでも、ユーザーがあなたのサイトを積極的にクリックしていないときにGoogle/Facebook /などへの非同期要求を行う必要がある場合は、そのトークンもどこかのユーザーデータベースに保存する必要があります必要に応じていつでもユーザーの代わりにリクエストを行うことができます。

    私はexpress-stormpathのノード認証ライブラリ(Passportに似ています)の著者です。これが最大のセキュリティを確保するための方法です。

    関連する問題