Oktaの一般設定の「CAPTCHA統合」を実際に動かしてみた
Oktaの管理画面のSecurity > Generalから行ける設定から、Okta管理画面のセキュリティ設定ができます。多くの設定はデフォルトのままで問題ないですが、セキュリティを強化したい場合にカスタマイズすることができます。
本日は「CAPTCHA統合」を試してみます。これにより、管理画面へのサインイン / サインアップ / パスワードリセットの各画面にCAPTCHA認証を挟むことで、自動化された攻撃(ブルートフォースやBot攻撃など)を遮断します。
注意点
- 管理者の締め出しリスクがあります。設定したサイトキーの誤りや、外部サービス(Google)の障害、あるいは無料枠の上限到達によりCAPTCHAが機能しなくなった場合、管理者自身も管理画面にアクセスできず、設定解除が困難になる「詰み」の状態を招く可能性があります。いきなり全てのサインインに適用するのではなく、まずはパスワードリセットなどの特定のアクションから適用し、動作を確認するのが定石です。
前提条件
今回CAPTCHA統合の外部サービスは、Googleの提供する reCAPTCHA v2 を利用します。
月間 10,000件(評価数)までが無料です。
- Okta
- 管理者権限: 設定変更には Super Admin 等の権限が必要です。
- 設定箇所:
Security > General内の CAPTCHA Integration セクションから設定を行います。
- Google
- reCAPTCHA v2 を選択してください。
- タイプは必ず [Invisible reCAPTCHA badge(非表示のreCAPTCHAバッジ)] を選択する必要があります。
- なぜ Invisible なのか?: Oktaがサポートしている実装は「非表示(Invisible)」のみであり、リスク分析をバックグラウンドで実行するためです。
設定
以下よりreCAPTCHAを作成します。
なお、Googleアカウント作成済、ログイン済とします。
また、Oktaダッシュボードに対してreCAPTCHAを有効化する想定なので、対象ドメインもOktaダッシュボードのドメイン名にします。

作成すると、サイトキーとシークレットキーが表示されます。後ほどOktaの設定画面に入力します。
Okta
Security > General から設定画面へ移動します。
以下のように設定してSaveします。

次にグローバルセッションポリシーをセッション確立の対象をpasswordに変更します。
これは、Oktaの公式ドキュメントに書いてあるとおり、制約のために必要な設定です。
現在、CAPTCHAは、識別子優先の認証フローでのパスワードリセットにはサポートされていません。つまり、ユーザーが2番目のサインインページでパスワードを入力するときには、CAPTCHAは使用できません。
Sign-In Widgetの同じページでユーザー名とパスワードが、ユーザーに表示されるように認証フローを変更することができます。
Securitu > Global Session Policyから適用されているルールを編集しましょう。

設定は以上です。
動作確認
正常なアクセス
Oktaダッシュボードにログイン > パスワードリセットを実施します。
すると以下の通りreCAPTCHAが有効になっていることが確認できます。

正常アクセスなら、案内に従ってパスワードリセットができます。
CAPTCHA認証はバックグラウンドで実行されます。
Botアクセス
ブラウザのUserAgentを変更してBotに偽装します。
Chromeの場合、F12を押下 > 電波アイコン > Network ConditionsのUserAgentからGooglebotを選択しましょう。

Oktaダッシュボードのログイン画面からパスワードリセット手続きに入ります。

すると、CAPTCHA認証が発動しました。

認証すると、無事に後続のパスワードリセットフローに進みます。

さいごに
万が一、管理者の締め出しが起きてしまった場合、公式から案内が出ている通り以下のcurlを実行しましょう。APIを実行できる環境づくり(トークン発行など)は事前にやっておく必要があります。
curl -v -X PUT -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: SSWS ${api_token}" \
-d '{"captchaId": null,
"enabledPages": null}'
"https://${yourOktaDomain}/api/v1/org/captcha"
以上です。






