2013-07-01 20 views
65

私はWebアプリケーションとAPIプロバイダの両方として使用したいnodejsアプリケーションを作成しています。ユーザーが認証されると、そのユーザーに後続の要求に使用されるトークンを割り当てたいと考えています。これは、セッション内のトークンを使用してユーザーをシリアライズおよび逆シリアル化するだけで、Webアプリケーションのパスポートとうまく動作します。ただし、APIリクエストに応答する場合、セッション情報を保存するよう設定するクッキーはありません。理想的には、パスポートはセッションと要求本体の両方でトークンを探します。これを達成するためにパスポートを構成する方法はありますか?nodejsパスポート認証トークン

答えて

124

すべてのリクエストでアクセストークンを使用してください。セッションを使用する必要はありません。次のワークフローです:

POST /signin 
  1. ユーザ名とパスワードは、クライアントのリクエストに掲載されています。
  2. サーバーは、パスポートのローカル戦略を使用してユーザーを認証します。 passport-localを参照してください。
  3. 資格情報が有効なユーザーを表している場合、サーバーは一部のジェネレータによって生成されたアクセストークンを返します。 node-jwt-simpleは良い選択です。
  4. 資格情報が無効な場合は/signinにリダイレクトしてください。

クライアントが認証サーバーからアクセストークンを受信すると、クライアントはサーバー上の保護されたリソースに要求を送信できます。たとえば:

GET /api/v1/somefunction?token='abcedf'

  1. クライアントは、トークンの引数を持つ一部のサーバーAPIを呼び出します。
  2. サーバーは、パスポートのベアラー戦略を使用してトークンを認証します。 passport-http-bearerを参照してください。 bnuheroとして

参照

Make a secure oauth API with passport.js and express.js (node.js)

+1

はこのためにすっごくありがとうございました。何らかの理由で私はOAuthがこれ以上複雑になる必要があると考えました。 – SomethingOn

+1

偉大な説明 – Omar

+1

トークンの生成に関して、期限切れのない1つのトークンを持つことは安全ですか?トークンの有効期限を切って新しいトークンを生成する必要がありますか? – sanfilippopablo

7

(そのアプローチは、あまりにもそのメリットを持っているが)あなたがセッションを必要としない言及しています。ここでは、私がこれから始めているボイラープレートプロジェクトを紹介します: https://github.com/roblevintennis/passport-api-tokens

これは代替案です。素敵な相互参照されることがあります。 http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local

そして、1つの以上の基準関連: http://mherman.org/blog/2013/11/11/user-authentication-with-passport-dot-js/