OpenID は分散認証のオープン標準です。 ユーザーは OpenID を提示すると Web サイトにサインインできます。 ユーザーの認証は、ユーザが選んだ OpenID プロバイダーにユーザーの識別子の正当性を検証してもらうことでおこなわれます。 Web サイトは検証結果を確認し、ユーザーのサインインをおこないます。
OpenID is an open standard for federated authentication. When visiting a website, users present their OpenID to sign in. The user then authenticates with their chosen OpenID provider, which issues an assertion to confirm the user's identity. The website verifies this assertion in order to sign the user in.
OpenID は passport-openid モジュールによって提供されています。
Support for OpenID is provided by the passport-openid module.
$ npm install passport-openid
OpenID を利用するには、returnURL
と realm
を明示しなければなりません。
この returnURL
は OpenID プロバイダーによる認証後にユーザーがリダイレクトされる先の URL です。
realm
は認証が正当である URL の範囲を示します。
通常であればこれらは Web サイトのルート URL となっています。
When using OpenID, a return URL and realm must be specified. ThereturnURL
is the URL to which the user will be redirected after authenticating with their OpenID provider.realm
indicates the part of URL-space for which authentication is valid. Typically this will be the root URL of the website.
var passport = require('passport')
, OpenIDStrategy = require('passport-openid').Strategy;
passport.use(new OpenIDStrategy({
returnURL: 'http://www.example.com/auth/openid/return',
realm: 'http://www.example.com/'
},
function(identifier, done) {
User.findOrCreate({ openId: identifier }, function(err, user) {
done(err, user);
});
}
));
OpenID 認証の検証用コールバック内では、引数として identifier
を利用できます。
identifier
はユーザーの主張している識別子が含まれます。
The verify callback for OpenID authentication accepts an identifier
argument
containing the user's claimed identifier.
OpenId を使ったサインインは、Web ページのフォーム上で実現できます。
A form is placed on a web page, allowing the user to enter their OpenID and sign in.
<form action="/auth/openid" method="post">
<div>
<label>OpenID:</label>
<input type="text" name="openid_identifier"/><br/>
</div>
<div>
<input type="submit" value="Sign In"/>
</div>
</form>
OpenID 認証には2つのルーティングが必要です。 最初に OpenID 識別子を含むフォームの内容を送信します。 認証の際、ユーザーは OpenID プロバイダーへとリダイレクトされます。 次のルーティングでは、OpenID プロバイダーの認証後にユーザーを指定した URL に戻します。
Two routes are required for OpenID authentication. The first route accepts the form submission containing an OpenID identifier. During authentication, the user will be redirected to their OpenID provider. The second route is the URL to which the user will be returned after authenticating with their OpenID provider.
// 認証のために OpenID 識別子を受け取った後、ユーザーを OpenID プロバイダーへと
// リダイレクトさせます。この後、OpenID プロバイダーはユーザーをアプリケーションへと
// リダイレクトして戻します:
// /auth/openid/return
app.post('/auth/openid', passport.authenticate('openid'));
// OpenID プロバイダーがユーザーをアプリケーションへとリダイレクトして戻した後、
// 検証結果を確認して認証を終えます。検証結果の正当性が確認できれば、ユーザーは
// ログインできます。確認できなければ、認証は失敗します。
app.get('/auth/openid/return',
passport.authenticate('openid', { successRedirect: '/',
failureRedirect: '/login' }));
OpenID では、認証されたユーザーのプロフィール情報の取得を設定できます。
プロフィール取得を有効にするには、 profile
オプションを true
にしてください。
OpenID can optionally be configured to retrieve profile information about the user being authenticated. Profile exchange is enabled by setting theprofile
option totrue
.
passport.use(new OpenIDStrategy({
returnURL: 'http://www.example.com/auth/openid/return',
realm: 'http://www.example.com/',
profile: true
},
function(identifier, profile, done) {
// ...
}
));
プロフィール取得が有効になれば、検証用コールバックの引数に profile
が追加されます。
profile
には OpenID プロバイダーが提供したユーザーのプロフィール情報がセットされています(詳細はユーザープロフィールを参照してください) 。
When profile exchange is enabled, the function signature of the verify callback
accepts an additional profile
argument containing user profile information
provided by the OpenID provider; refer to User Profile for
further information.