コンテンツにスキップ

ログイン

パスワードを確認したら、ユーザーの ID、ブラウザーの情報、(あれば)記憶したデバイスの Cookie を渡して beginSecondStep を呼びます。返された SecondStep はサーバー側のセッションに保存してください。Cookie や hidden フィールドには絶対に入れないでください。

SecondStep step = tenonAuth.beginSecondStep(account.id(),
new SignInContext(request.getRemoteAddr(), request.getHeader("User-Agent")),
cookie(request, "tenon_device"), locale.getLanguage());
kind 画面 次に
CODE_ENTRY コード入力画面:6桁を入れる欄が1つ。method が EMAIL のときは、送信先(emailSentTo、一部を伏せたもの)を示し、「新しいコードを送る」を用意します(30秒後に、もう一度 beginSecondStep を呼ぶ) completeWithCode
PUSH_WAIT 待機画面:「スマートフォンでログインを承認し、42 を選んでください」(number)。2秒ごとに再読み込み、または JavaScript で確認します PENDING でなくなるまで pollApproval
TRUSTED なし:記憶したブラウザー ログイン
NO_METHOD ユーザーはまだ方法を設定していません。パスワードだけでログインさせるか、先に設定を求めるかは、あなたのポリシーで決めます
RECOVERY_ONLY メールを送れませんでした。リカバリー画面だけを表示します completeWithRecoveryCode

コード入力画面と待機画面には、「スマートフォンをなくしましたか? リカバリーコードを使う」のリンクを置きます。リンク先のリカバリー画面は、リカバリーコードまたはヘルプデスクのアクセスパスを入れる欄が1つで、completeWithRecoveryCode を呼びます。

status すること
APPROVED ログインさせます。ユーザーがチェックを入れていれば、ブラウザーを記憶します(下記)
WRONG_CODE 「コードが違います。残り attemptsRemaining 回」と表示して、画面をもう一度出します
PENDING ログイン承認:待ち続けます
DENIED ユーザーがスマートフォンで「自分ではない」と答えました。ログインを終了し、パスワードの変更を勧めてください。だれかがパスワードを知っています
FAILED 間違いが多すぎます:パスワードの入力からやり直します
EXPIRED 時間切れ:パスワードの入力からやり直します

FactorLocked(例外・エラー)は、10回続けて間違えたことを意味します。その方法は lockedUntil までロックされます。その時刻を表示し、リカバリー画面を案内してください。

「このデバイスでは次回から確認しない」

Section titled “「このデバイスでは次回から確認しない」”

コード入力画面と待機画面にチェックボックスを用意します。チェックされていて、結果が APPROVED のとき:

TrustedDevice device = tenonAuth.rememberDevice(step.userId(), step.challengeId());
// Cookie "tenon_device" = device.token():HttpOnly、Secure、SameSite=Lax、device.expiresAt()(14日)まで。

記憶したブラウザーが使えなくなるとき:

  • ユーザーが方法を変更または削除したとき
  • 管理者がすべてのデバイスからログアウトさせたとき
  • 14日経ったとき

トークンは、そのユーザーにしか使えません。

language(ja または en)は、メールのコードの言語です。指定しなければ日英併記になります。スマートフォンは、それぞれの言語で要求を表示します。

  • 承認の要求とメールは、ユーザーごとに15分間で5回まで:retryAfter つきの TooManyRequests エラー。
  • メールのコードは、30秒に1回まで。
  • これらはログインの失敗ではなく、「しばらくお待ちください」と表示してください。