TL;DR
Node.js 向けの認証ライブラリ(ミドルウェア)。どのような認証を行うかは、Strategy と呼ばれる拡張機能で選ぶ。
仕組み
Passport.js 自体は認証の枠組みだけを提供し、具体的な認証の処理は Strategy に任せる。Strategy にはパスワード認証(passport-local)、OAuth、OpenID などがあり、公式サイトでは 500 を超える Strategy が公開されている。Express ベースの Web アプリケーションであれば、既存のコードをほとんど変えずに組み込める。
公式ドキュメントによると、Passport はリクエストを認証することだけを目的とし、データアクセスなどはアプリケーションに任せる。中心となる概念は、ミドルウェア、Strategy、セッションの 3 つである。
多くの Strategy は、アプリケーションが渡す verify 関数を使う。Strategy はリクエストから資格情報を取り出し、verify を呼んで、それがどのユーザのものかを判定する。verify は、成功ならユーザを返す。ユーザが見つからないか資格情報が誤っていれば false を返し、データベースが使えないなどの内部エラーのときだけエラーを返す。設定した Strategy は passport.use() で登録し、ルートで passport.authenticate() にその名前を渡して使う。
例
passport-local でパスワード認証を行う例。
var passport = require("passport")
var LocalStrategy = require("passport-local")
passport.use(
new LocalStrategy(function verify(username, password, cb) {
// ユーザを探してパスワードを確かめ、
// エラーなら cb(err)、失敗なら cb(null, false)、成功なら cb(null, user) を呼ぶ
}),
)
app.post("/login/password", passport.authenticate("local"))