Bouncr日本語マニュアル
Bouncrは、オープンソースのリバースプロキシ型認証・認可ミドルウェアです。特徴としてフルAPIで認証認可+管理画面を含めて必要なものが取り揃っており、認証状態の管理もBouncrがやるので、作るバックエンドのアプリケーションを容易にステートレスにできることが挙げられます。
OpenID Connect
OpenID Connectを使って認証するには、まずIdPの設定をします。
/bouncr/api/oidc_providers
code:json
{
"name": "google",
"response_type": "code",
}
サインインページでは、まずStateとNonceを取得します。
/bouncr/api/pre_sign_in をPOSTで呼び出すと、以下のようにstateとnonceが返ってくるので、これを「IdPでログイン」のリンクのパラメータとして付与してください。
code:json
{
"state": "uasdnvsdvbewr23",
"nonce": "4v8ntw35409tuvhusore"
}
リンク先は、Googleの場合は以下のようになります。
code:text
これで、GoogleのOpenID Connectのログインページに遷移し、成功すれば上で指定したredirect_uriに戻ってきます。その際、Bouncr APIが自動的にOpenIDをIdPに取得しにいき、状態に応じて以下の3つに分岐します。
1. IdPログイン成功。→ 200
2. IdPログイン処理中に何かしらの認証エラーが発生する → 401
3. IdPログイン成功したが、アカウントとの関連が無い。
1. 新規アカウント登録
2. 既存のアカウントとの関連付け
XHRでBoundrのAPIを呼び出している場合は、それぞれのケースでのリダイレクト先URLを設定できます。
signInRedirectUrl: 上記1のケース
フラグメントとQueryStringで、accountまたはtokenを受け取ることができます。デフォルトはQueryStringです。
【singInRediretUrlで設定したパス】?account=【ユーザアカウント】&token=【Bouncrの認証トークン】
unauthenticateRedirectUrl: 上記2のケース
signUpRedirectUrl: 上記3のケース
フラグメントとQueryStringで、codeを受け取ることができます。デフォルトはQueryStringです。
【singUpRediretUrlで設定したパス】?code=【サインアップ時にこのOpenID Connectと関連付けるためのコード】
3のケースでは新規アカウント登録か、既存のアカウントとの関連付けをするかはBouncr利用側アプリケーションで判別してページを出し分けてください。通常はユーザセッションが存在有無によって分岐できるはずです。
また3のケースでは、リダイレクトURLにcodeが付いてきます。これをsign_upエンドポイントに渡すことによってIdPのアカウントとBouncrアカウントの関連付けを同時に行うことができるようになります。
フロントエンド側でのエンドポイントの設定
エンドポイントはBouncrConfigurationの以下の設定で可能です。
code:java
OpenID Connect経由のサインアップ
OpenId Connectのプロバイダから取得したClaim(Email等が含まれる)を、サインアップ時にinvitationのエンドポイントで参照できます。例えば、これを用いてユーザプロフィールのデフォルト入力に使います。
code:shell
{
"oidc_invitations":[
{
"oidc_provider": "google",
"claim": {
"email": "xxxxxx@gmai.com"
}
]}
ユーザが接続しているOpenId Connectプロバイダの情報をみる
ユーザプロフィールのページなどで、どのOpenId Connectプロバイダと繋げているか(そのプロバイダ経由でサインイン/サインアップしたことがあるか)は、userのエンドポイントでembedパラメータにoidc_providersを付けることで取得できます。
code:shell
{
"account": "user1",
"email": "user1@example.com",
}