web-dev-qa-db-ja.com

nodejsパスポート認証トークン

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

70
Austin

リクエストごとにアクセストークンを使用するだけです。セッションを使用する必要はありません。ワークフローは次のとおりです。

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

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

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

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

参考文献

安全なoauth passport.jsおよびexpress.js(node.js)を使用したAPI)

128
bnuhero

Bnuheroが述べているように、セッションは必要ありません(ただし、このアプローチにはメリットもあります)。これのために私が始めているボイラープレートプロジェクトがあります: 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/

7
Rob

NodejsのパスポートでisAuthenticated()メソッドを使用できます。すべてのルートでif(req.isAuthenticated())をチェックでき、すでに認証されている場合はルートにアクセスできるようになります。またはelseブロックで他の実行をリダイレクトまたは実行できます。 Passportでは、ログインに成功した場合はdone(null、user)を返すことができ、セッションが終了するまでデータをCookieに保存します。ユーザーでは、メール、パスワードなどのユーザーに関する情報を入力できます。

app.get('/home', (req, res) =>{
    if(req.isAuthenticated()){
        //render home page
    } else {
        // go back to the login page or throw soome error
    }
}) 
0
Anuj Kumar