シングル・サインオン (SSO)
Cloud Directory のシングル・サインオン (SSO) を使用すれば、複数の Web アプリ間でスムーズな認証を行うことができます。 ユーザーの初回サインイン時に SSO がオンになっていれば、次回にサインインするときに資格情報を再入力する必要がありません。 代わりに、同じ App ID インスタンスで保護されているすべてのアプリに自動的にサインインします。
App ID は、Cloud Directory ユーザーに SSO を提供します。 ソーシャルまたはフェデレーテッド SAML ID プロバイダーを使用する場合、SSO はそのプロバイダーによって管理され、App ID はそれに従います。
仕組みについて
SSO がどのように動作するのかを、次の図で見てみましょう。
- Cloud Directory ユーザーが初めてアプリにサインインします。
- ユーザーに対して、ユーザー名または E メール、およびパスワードを入力して認証を行うよう、プロンプトが表示されます。
- 資格情報が有効であれば、ユーザーはアプリにサインインします。 同時に、App ID はセッションを作成し、ユーザーのブラウザーに Cookie を設定します。
- ユーザーが他のアプリケーションのいずれかにサインインしようとすると、App ID はセッション Cookie を検出し、そのユーザーを自動的にアプリケーションにサインインさせます。App ID セッション Cookie はインスタンス固有であり、インスタンスの固有の秘密鍵によって署名されます。
現在、Cloud Directory の SSO は、Cloud Directory が唯一の有効な ID プロバイダーである場合に機能するように構成されています。 複数の ID プロバイダーを使用するように App ID のインスタンスが構成されている場合は、SSO を有効にしてもサインイン・フローは変わりません。 ユーザーはサインインのたびに Cloud Directory 資格情報を入力するか他のいずれかのプロバイダーを選択するよう求められます。
SSO の構成
App ID ダッシュボードまたは API を使用して、シングル・サインオンを構成できます。
GUI を使用する場合
GUI を使用して SSO を構成できます。
-
App ID ダッシュボードの**「Cloud Directory」>「シングル・サインオン」**タブに移動します。
-
**「シングル・サインオンを有効にする」を「使用可能」**に切り替えます。
-
ユーザーがアクティブ状態にない時間がどれだけ経過すれば SSO セッションの有効期限が切れるか、その時間を設定します。 セッションの有効期限が切れると、ユーザーはもう一度サインインしなければなりません。 この時間は分単位で指定し、非アクティブでいられる最大許容時間は 10,080 分 (7 日間) です。 デフォルトの時間は 1440 分で、これは 1 日に相当します。
-
「ログアウト・リダイレクト URI (Logout redirect URI)」ボックスにリダイレクト URI を追加し、+ 記号をクリックします。 信頼できるアプリケーションだけを登録するよう、確認してください。 URI を登録することによって、App ID が許可ワークフローにこの URI を含めることを許可することになります。
-
保存 をクリックします。
API を使用する場合
SSO 構成管理 API を使用して 3 つの設定を定義することによって、機能を有効にできます。
以下に呼び出し例を示します。
{
"isActive": true,
"inactivityTimeoutSeconds": 86400,
"logoutRedirectUris": [
"http://my-first-app.com/after_logout",
"http://my-second-app.com/after_logout"
]
}
設定 | 定義 |
---|---|
isActive |
SSO を使用可能にするには、この値を true に設定します。 デフォルト設定は false です。 |
inactivityTimeoutSeconds |
ユーザーのアクティビティーがないまま経過できる最長時間。この時間を超えると、ユーザーは資格情報の再入力を求められます。 この値は秒数で指定し、最大設定値は 604800 seconds (7 日間) です。 デフォルトの設定値は 86400 seconds (1 日) です。 |
logoutRedirectUris |
ユーザーがサインアウトした後に App ID によってリダイレクトされる、許可された URI のリスト (コンマ区切り形式)。 |
ログアウトの構成
App ID では、ユーザーが表示しているブラウザーで SSO セッションを終了できます。 ユーザーのブラウザーによって API エンドポイントにアクセスした場合、そのセッションは終了し、そのブラウザーで次回にサインインを行う際にはどのアプリに対しても資格情報を入力するよう、プロンプトが表示されます。
パスワードの変更、リセット、または更新に関連したいずれかの処理フローが開始されると、すべてのクライアントにわたってそのユーザーのセッションは自動的に終了します。
API を使用する場合
ユーザーをサインアウトさせるには、該当する情報を使用して以下の API 呼び出しを実行し、ユーザーのブラウザーをリダイレクトします。
https://<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>/cloud_directory/sso/logout?redirect_uri=<redirectURI>&client_id=<clientID>
変数 | 値 |
---|---|
region |
App ID のインスタンスがプロビジョンされているリージョン。 使用可能なリージョンについてはこちらを参照してください。 |
tenantID |
App ID のインスタンスの固有 ID。 この値は、 App ID ダッシュボードの 「サービス資格情報」 タブで確認できます。 一連のサービス資格情報がない場合は、これを作成してそこから値を取ります。 |
redirectURI |
App ID ダッシュボードを使って SSO 構成で指定した URI。 セキュリティー上の理由により、値を指定しない場合はリダイレクトが行われず、エラーが表示されます。 |
clientID |
アプリケーションのクライアント ID。 |
SSO セッションが終了しても、セッションに保管された有効なアクセス・トークンを持つユーザーは、そのトークンの期限が切れるまで資格情報の入力を求められない可能性があります。 デフォルトで、トークンは 1 時間後に有効期限が切れます。
Node.JS サーバー SDK を使用する場合
また、App ID Node.js サーバー SDK を使用して、リダイレクトの処理を自動的に行うこともできます。
-
logoutSSO
をメソッドとして設定します。 以下に例を示します。let webAppStrategy = new WebAppStrategy(.....); .... webAppStrategy.logoutSSO();
-
ログアウトを構成します。
app.get('/logoutSSO', (req, res) => { res.clearCookie("refreshToken"); webAppStrategy.logoutSSO(req,res, { "redirect_uri": "https://my-app.com/after_logout" }); });
ユーザーのすべてのセッションを終了する
管理者である場合、App ID 管理者 API を使用して、ユーザーのすべての SSO セッションを終了することができます。 API は Cloud IAM トークンによって保護されています。
API 要求例:
POST https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/Users/<userID>/sso/logout
Headers:
Authorization: Bearer <IAMToken>
Content-Type: application/json
変数 | 値 |
---|---|
Content-Type |
要求のコンテンツ・タイプ。 受け入れられる値は application/json です。 |
region |
App ID のインスタンスがプロビジョンされているリージョン。 使用可能なリージョンについてはこちらを参照してください。 |
tenantID |
App ID のインスタンスの固有 ID。 この値は、 App ID ダッシュボードの 「サービス資格情報」 タブで確認できます。 一連のサービス資格情報がない場合は、これを作成してそこから値を取ります。 |
userID |
Cloud Directory ユーザーの固有 ID。 この ID は Cloud Directory ユーザー API を使用して、またはユーザーの識別トークンを表示して入手できます。 |
この API を呼び出すと、指定されたすべてのユーザーの SSO セッションが無効になります。 つまり、デバイスやブラウザーからいずれかのアプリにユーザーが次回サインインを試みるときに、資格情報の再入力を求められます。