CHAPTER 00

本書の目的

この章の合意ポイント本書が何を定めるものかと、既存の要件定義資料との関係を明確にします。

0.1 目的

本書は、高田工業所様「日報モバイルアプリ」にメールOTP認証機能を追加するにあたり、次の3点を定めることを目的とします。

No定めること該当章
1追加する機能の内容と範囲(要件定義)第2章〜第5章
2Platio Canvas 上での実現方法(基本設計)第5章〜第7章
3開発・テストの役割分担とお見積りの前提第9章・第10章

本書の承認をもって要件確定とし、以降の開発およびテストの基準とします。日報モバイルアプリの既存の要件定義資料を前提とし、それらの内容は本書では繰り返しません。

ふえん様にお願いする事項は、巻末の「ふえん様へのご依頼事項」に一覧化しています。お願いするのは本書のご確認と結合テストの2点で、それ以外はソウゾウにて実施します。

0.2 文書情報

文書名メールOTP認証機能 要件定義書 兼 基本設計書
対象システム高田工業所様 日報モバイルアプリ(Platio Canvas)
対象アプリ社員ワークレポート/協力会社ワークレポート/マスタアプリ/作業管理アプリ(社員)/作業管理アプリ(協力会社) 計5アプリ
版数Ver 0.2(ドラフト・レビュー用)
作成ソウゾウ合同会社(西澤志門/菊池星哉)
提出先株式会社ふえん 安藤昭太 様
見積¥180,000(税抜)/要件定義開始から5営業日

0.3 本書の範囲

ID項目区分
S-01ログイン時のメールOTP(ワンタイムパスワード)認証対象
S-02認証コードの発行・メール送信・照合(すべてPlatio Canvas内で実装)対象
S-03認証コードの有効期限(5分)判定対象
S-04失敗回数のカウントとアカウントロック対象
S-05ユーザーマスタへのフィールド追加対象
X-01一定時間経過による強制ログアウト別紙
X-02アカウントロックの解除画面(既存マスタアプリで対応)対象外
X-03新規登録・アカウント削除・パスワード再発行申請フローの改修対象外
X-04Platio Canvas 標準ログイン機能自体の改修対象外
X-05外部サーバー・外部APIの構築対象外 本方式では不要

0.4 確定事項

No確定内容決定者関連
1実装はPlatio Canvas内で完結させる。使用する機能はメール送信・ページ遷移・条件による出し分けに限るソウゾウ2.1
2OTPは対象5アプリすべてに適用する(作業管理アプリは社員用・協力会社用の2本)ふえん様1.1
3お見積り ¥180,000(税抜)/5営業日は変更しないふえん様第10章
4単体テストはソウゾウ、結合テストはふえん様が実施する両社9.1
5仕様の詳細はソウゾウにて決定する。ふえん様には内容のご確認と結合テストをお願いするソウゾウ11.1・A.1
6通信環境への依存は考慮しない(Platio Canvas は通信環境がなければ起動しないため)ソウゾウ2.4
CHAPTER 01

現行システムの整理

この章の合意ポイントOTPを載せる土台の認識を揃えます。

1.1 対象アプリ

IDアプリ主な利用者OTP適用
AP-01社員ワークレポート(作業日報)高田工業所 社員適用
AP-02協力会社ワークレポート(作業従事者報告書)協力会社 社員・作業管理者適用
AP-03マスタアプリシステム管理者・各所属適用
AP-04作業管理アプリ(社員)社員作業管理者・承認者・調達課適用
AP-05作業管理アプリ(協力会社)社員作業管理者・承認者・協力会社作業管理者適用

作業管理アプリは社員ワークレポート用と協力会社ワークレポート用が分かれているため、対象は合計5アプリです。5アプリすべてに同一の仕組みを実装します。1アプリ目で仕様を確定させ、2〜5アプリ目は同じ構成を展開します。

1.2 利用者区分

ユーザーマスタの権限区分(システム管理者・作業管理者・承認者・一般)と、ユーザー区分(社員・協力会社)に基づく利用者は次のとおりです。本機能は区分によらず全利用者に同一の認証を適用します。

No組織区分主な利用アプリ
1高田工業所システム管理者マスタ、作業管理(社員・協力会社)
2社員作業管理者(管理課・調達課)社員WR、マスタ、作業管理(社員・協力会社)
3承認者(工事担当者)社員WR、作業管理(社員・協力会社)
4社員(日報入力者)社員WR
5協力会社協力会社作業管理者協力会社WR、作業管理(協力会社)
6協力会社社員(作業従事者)協力会社WR

1.3 既存のアカウント運用フローとの整合

既存要件定義(資料6)では次が定義されています。本機能はこれらと矛盾しない形で追加します。

フロー既存の定義OTP追加による影響
新規登録アプリから情報の登録を行なう。完了メールを受領し、その内容をもとにログインを行なう初回ログイン時からOTPが必要になる。完了メールの案内文に追記が必要
再発行申請アプリから再発行申請を行なう。メールアドレス宛に再発行依頼が届く再発行後の初回ログインでもOTPが必要。運用マニュアルに追記が必要
アカウント削除アプリから削除申請を行ない、完了メールを受領する影響なし
権限変更アカウント管理者へ申請し、管理者が変更を行なう影響なし
好材料 既存フローがすでにメール前提で設計されているため、全利用者が受信可能なメールアドレスを保有していることが前提として成立しています。認証コードの送信先はこのアドレスをそのまま使用できます。
CHAPTER 02

実装方式

この章の合意ポイント本機能の実装方式です。Platio Canvas の標準機能のみで完結させます。

2.1 基本方針

認証コードの発行・保管・照合を、ユーザーマスタのフィールドとアクションだけで実現します。外部サーバーやデータベースは使用しません。

使用するPlatio Canvasの機能用途
ランダム関数6桁の認証コードを生成する
レコード更新生成したコード・送信日時・失敗回数をユーザーマスタへ書き込む
メール送信認証コードを利用者のメールアドレスへ送信する
ページ遷移認証画面・ホーム画面・エラー画面へ振り分ける
条件による出し分けコードの一致判定、有効期限判定、失敗回数判定を行なう
この方式の利点 外部連携・API・独自サーバーが不要なため、構築対象がアプリ内に閉じます。障害切り分けが単純になり、拠点分割時の展開も、フィールドとアクションの複製だけで完了します。

2.2 全体の流れ

[ログイン画面] │ │ ログインボタン押下 ▼ ①ロック判定 ──ロック中──▶[アカウントロック画面] │ │ ロックなし ▼ ②認証コードを生成(6桁・ランダム) ③ユーザーマスタを更新 ・認証コード ← 生成値 ・コード送信日時 ← 現在日時 ・失敗回数 ← 0 ④メール送信(利用者のメールアドレス宛) │ ▼ [認証コード入力画面] │ │ 認証ボタン押下 ▼ ⑤有効期限判定(送信日時から5分以内か) │ └─超過──▶[有効期限切れ画面]──再送──▶ ②へ │ 期限内 ▼ ⑥コード照合(入力値 = 認証コードフィールド) │ ├─一致───▶ ⑦認証コードをクリア ──▶[ホーム画面] │ └─不一致─▶ ⑧失敗回数 +1 │ ├─5回未満──▶[認証コード入力画面](エラー表示・残り回数) │ └─5回到達──▶ ⑨ロック状態 ON ──▶[アカウントロック画面]

2.3 失敗回数の考え方

失敗回数はログインボタンの押下と同時に0へリセットします。したがって、1回のログイン操作あたり5回まで入力を誤ることができます。

ロックが機能する理由 失敗回数はログインのたびに0へ戻りますが、ロック状態は別のフィールドで保持するため、リセットされません。5回失敗してロックがかかった利用者は、ログインをやり直してもロック判定(流れ①)で止まります。解除は運営への問い合わせによってのみ行ないます。

2.4 通信環境について

Platio Canvas のWebアプリは通信環境がなければ起動しないため、オフライン時の動作は考慮の対象外とします。認証コードの生成・送信・照合はいずれも通信を前提とした処理であり、アプリが起動できる状況であれば実行可能です。

2.5 複数アプリでの動作

5アプリすべてに同じ仕組みを実装するため、アプリを起動するたびに認証が発生します。複数アプリを使用する利用者(社員作業管理者など)は、アプリごとに認証コードの入力が必要です。

設計上の確認事項 ユーザーマスタが5アプリで共通の場合、認証コードフィールドも共通となります。あるアプリでログインした直後に別のアプリでログインすると、先に発行したコードが後から発行したコードで上書きされます。同時ログインが実運用で発生しうるかは、ソウゾウにて環境を確認のうえ判断します。発生する場合は、アプリごとに認証コードフィールドを分ける構成とします。
CHAPTER 03

機能要件

この章の合意ポイントコード桁数・有効期限・失敗回数上限などのパラメータを確定します。

3.1 機能要件一覧

ID要件仕様優先
FR-01ロック判定ログインボタン押下時、最初にロック状態を判定する。ロック中はアカウントロック画面へ遷移し、認証コードを発行しない必須
FR-02認証コードの生成ランダム関数により6桁の数字を生成する必須
FR-03認証コードの保管生成したコードをユーザーマスタの認証コードフィールドへ書き込む必須
FR-04送信日時の記録メール送信と同時に、コード送信日時フィールドへ現在日時を記録する必須
FR-05失敗回数のリセットログインボタン押下と同時に、失敗回数フィールドを0へ更新する必須
FR-06メール送信ユーザーマスタに登録されたメールアドレス宛に、認証コードを本文に含むメールを送信する必須
FR-07認証画面への遷移コード発行後、認証コード入力画面へ遷移する必須
FR-08有効期限の判定認証ボタン押下時、コード送信日時から5分以内であることを判定する。超過している場合は有効期限切れ画面へ遷移し、認証を成立させない必須
FR-09コードの照合入力値とユーザーマスタの認証コードフィールドが一致することで認証成立とする必須
FR-10認証成功時の動作認証コードフィールドをクリアし、ホーム画面へ遷移する必須
FR-11認証失敗時の動作失敗回数を1加算し、認証コード入力画面へ戻す。エラーメッセージと残り回数を表示する必須
FR-12失敗回数の上限5回再送をはさんでも通算する。上限に達した場合はロック状態をONにし、アカウントロック画面へ遷移する必須
FR-13認証コードの再送認証コード入力画面から再送を選択できる。再送時は新しいコードを生成し、認証コードフィールドとコード送信日時を更新のうえメールを送信する必須
FR-14再送時の失敗回数再送では失敗回数をリセットしない(リセットはログインボタン押下時のみ)。これにより、再送に個別の回数制限を設けなくても試行は通算5回に制限される必須
FR-15ロックの解除システム管理者がマスタアプリからロック状態をOFF、失敗回数を0に更新することで解除する必須
FR-16未認証時のアクセス防止認証を経ずにホーム画面・業務画面へ到達できないこと必須

3.2 パラメータ一覧

No項目補足
1認証コードの桁数6桁(半角数字)
2認証コードの有効期限5分コード送信日時からの経過時間で判定する
3失敗回数の上限5回再送をはさんでも通算する。上限に達した時点でアカウントをロックする
4失敗回数のリセット契機ログインボタン押下時のみ再送ではリセットしない
5再送の回数制限個別には設けない再送しても失敗回数は引き継がれるため、上限5回によって通算で制限される
「通算で5回」の意味 再送を行なっても失敗回数はリセットされないため、1回のログイン操作で入力を誤れるのは再送の有無にかかわらず合計5回までです。再送そのものに回数制限を設けなくても、試行回数は5回に抑えられます。
ログインボタン押下 ─▶ 失敗回数 = 0 │ ├─ 1回目 失敗 ─▶ 失敗回数 = 1 ├─ 2回目 失敗 ─▶ 失敗回数 = 2 │ ├─ 再送 ────▶ 失敗回数 = 2 のまま(リセットしない) │ ├─ 3回目 失敗 ─▶ 失敗回数 = 3 ├─ 4回目 失敗 ─▶ 失敗回数 = 4 │ ├─ 再送 ────▶ 失敗回数 = 4 のまま │ └─ 5回目 失敗 ─▶ 失敗回数 = 5 ──▶ アカウントをロック

上記の値は設定項目としては持たず、アクション内に組み込みます。変更にはアクションの修正が必要です。

3.3 通知メール仕様

差出人名高田工業所 日報アプリ C-03
送信元アドレスPlatio Canvas のメール送信機能に依存 C-01
件名【認証コード】日報アプリ ログイン認証
本文(案)日報アプリの認証コードをお知らせします。

認証コード:123456
有効期限:発行から5分間

この操作に心当たりがない場合は、パスワードを変更のうえ、システム管理者へご連絡ください。
※本メールは送信専用です。
形式テキストメール
送信タイミングログインボタン押下時、および再送ボタン押下時

3.4 異常系

ID事象システムの振る舞い表示文言(案)
E-01コード不一致失敗回数を1加算し、認証コード入力画面に留まる認証コードが正しくありません。残り試行回数:n回
E-02有効期限切れ有効期限切れ画面へ遷移。失敗回数は加算しない認証コードの有効期限が切れました。認証コードを再送してください。
E-03失敗回数が上限に到達ロック状態をONにし、アカウントロック画面へ遷移認証に5回失敗したため、アカウントをロックしました。システム管理者へお問い合わせください。
E-04ロック中のログインアカウントロック画面へ遷移。認証コードは発行しないこのアカウントはロックされています。システム管理者へお問い合わせください。
E-05入力形式の誤り(桁数不足・文字種違い)照合を行なわず、入力画面に留まる。失敗回数は加算しない認証コードは6桁の数字で入力してください。
E-06メール送信の失敗認証コード入力画面へ遷移し、再送を促す認証コードを送信できませんでした。再送してください。
E-05 の扱い 桁数不足などの形式誤りで失敗回数を加算すると、単純な打ち間違いでロックがかかりやすくなります。入力形式のチェックは照合の前段で行ない、形式が正しい入力のみを1回の試行として数える設計とします。
CHAPTER 04

画面設計

この章の合意ポイント追加する画面と、そこに置く要素・文言を確定します。

4.1 画面一覧

ID画面名区分概要
SCR-01ログイン画面既存ログインボタン押下でACT-01を実行する
SCR-02認証コード入力画面新規6桁コードの入力・認証・再送
SCR-03有効期限切れ画面新規期限超過時に表示。再送への導線を持つ
SCR-04アカウントロック画面新規ロック時に表示。問い合わせ先を案内する
SCR-05ホーム画面既存認証成功後の遷移先

SCR-03 はモーダル表示でも構いません。実装のしやすさに応じて選択します。

4.2 SCR-02 認証コード入力画面

┌──────────────────────────────┐ │ ログイン認証 │ │ │ │ ご登録のメールアドレス宛に │ │ 認証コードを送信しました。 │ │ │ │ ┌──────────────────────┐ │ │ │ 認証コード(6桁) │ │ │ └──────────────────────┘ │ │ │ │ ⚠ 認証コードが正しくありません。 │ │ 残り試行回数:4回 │ │ │ │ [ 認証する ] │ │ [ 認証コードを再送する ] │ │ │ │ ───────────────────────── │ │ メールが届かない場合は、迷惑メール │ │ フォルダをご確認ください。 │ └──────────────────────────────┘

4.3 画面項目定義(SCR-02)

No項目種別必須仕様
1説明文表示認証コードを送信した旨を案内する
2認証コード入力半角数字6桁。数値キーボードを既定表示する
3メッセージ領域表示E-01・E-05・E-06 の文言と残り試行回数を表示する
4認証するボタンボタンACT-02(認証)を実行する
5再送ボタンボタンACT-03(再送)を実行する
6補足ガイド表示迷惑メールフォルダの確認案内を常時表示し、問い合わせを削減する

本画面には業務画面への導線を設けません。ログイン画面へ戻る場合は Platio Canvas 標準のログアウト操作を使用します。

4.4 SCR-03 有効期限切れ画面

No項目仕様
1メッセージ認証コードの有効期限が切れました。認証コードを再送してください。
2再送ボタンACT-03(再送)を実行し、SCR-02 へ遷移する

4.5 SCR-04 アカウントロック画面

No項目仕様
1メッセージ認証に5回失敗したため、アカウントをロックしました。
解除にはシステム管理者による対応が必要です。
2問い合わせ先システム管理者の連絡先を表示する C-02

本画面には再送ボタンも認証ボタンも配置しません。ロック中は認証コードを発行しないため(FR-01)、利用者が自力で復帰する導線を持たせない設計とします。

4.6 画面遷移図

[SCR-01 ログイン画面] │ ログインボタン(ACT-01) ▼ ロック中か? ──Yes──▶ [SCR-04 アカウントロック] │ No ▼ [SCR-02 認証コード入力]◀────────┐ │ 認証ボタン(ACT-02) │ 再送(ACT-03) ▼ │ 期限内か? ──No──▶[SCR-03 期限切れ] │ Yes ▼ コードが一致するか? │ Yes ───┴─── No │ │ ▼ ▼ [SCR-05 ホーム] 失敗回数 +1 │ 5回未満 ├─────▶[SCR-02 に戻る] 5回到達 └─────▶[SCR-04 アカウントロック]
CHAPTER 05

データ設計

この章の合意ポイントユーザーマスタへ追加するフィールドと、その表示権限を確定します。権限設定は本機能の安全性を左右する最重要項目です。

5.1 ユーザーマスタへの追加フィールド

既存のユーザーマスタに次の4フィールドを追加します。新規テーブルの作成は行ないません。

Noフィールド名データ型初期値用途
1認証コードテキスト(6桁)発行中の認証コードを保持する
2コード送信日時日時有効期限(5分)の判定基準
3失敗回数数値0認証失敗の連続回数
4ロック状態単一選択(ロック中/解除)解除アカウントのロック有無

認証コードはテキスト型とします。数値型では先頭の0が失われ、6桁を維持できないためです。

5.2 権限設定(アプリ項目一覧への追加行)

最重要 認証コードフィールドは、いかなる権限区分でも画面に表示させてはなりません。表示可能にすると、マスタアプリを閲覧できる利用者が他の利用者の認証コードを参照でき、OTPを導入した意味が失われます。値はアクション内でのみ参照します。

既存の「アプリ項目一覧」の形式に合わせた追加行は次のとおりです。

Noマスタ名入力情報データ型システム
管理者
社員作業
管理者
承認者社員協力会社
作業管理者
協力会社
社員
備考
1ユーザーマスタ認証コードテキスト非表示非表示非表示非表示非表示非表示アクション内でのみ参照。全権限で非表示とする
2ユーザーマスタコード送信日時日時表示非表示非表示非表示非表示非表示障害調査のためシステム管理者のみ表示
3ユーザーマスタ失敗回数数値入力非表示非表示非表示非表示非表示ロック解除時に0へ戻す
4ユーザーマスタロック状態単一選択入力非表示非表示非表示非表示非表示ロック解除時に「解除」へ変更する

上記は既存資料「_v5_Platioマスタ関係」のアプリ項目一覧へそのまま追記できる形式で記載しています。

5.3 既存フィールドの参照

本機能は既存フィールドを参照するのみとし、変更は行ないません。

既存フィールド本機能での用途
ユーザーコード認証対象レコードの特定
ユーザー氏名メール本文の宛名(使用有無は C-03)
メールアドレス認証コードの送信先
権限区分ロック解除操作の権限判定(システム管理者のみ)
CHAPTER 06

アクション定義

この章の合意ポイントPlatio Canvas 上で組む処理をステップ単位で定義します。詳細設計の骨格にあたります。

6.1 アクション一覧

IDアクション起動契機配置
ACT-01ログイン(コード発行)SCR-01 のログインボタン押下各アプリ
ACT-02認証SCR-02 の認証ボタン押下各アプリ
ACT-03認証コードの再送SCR-02・SCR-03 の再送ボタン押下各アプリ
ACT-04ロック解除マスタアプリでのレコード編集マスタアプリのみ

6.2 ACT-01:ログイン(コード発行)

  1. ログインした利用者のユーザーマスタのレコードを取得する
  2. ロック状態を判定する。「ロック中」の場合は SCR-04(アカウントロック画面)へ遷移し、以降の処理を行なわずに終了する
  3. ランダム関数により6桁の数字を生成し、変数へ格納する
  4. ユーザーマスタのレコードを更新する
     ・認証コード ← 生成した6桁
     ・コード送信日時 ← 現在日時
     ・失敗回数 ← 0
  5. メール送信アクションを実行する。宛先は当該レコードのメールアドレス、本文に生成した6桁を差し込む
  6. SCR-02(認証コード入力画面)へ遷移する
ステップ2の位置に注意 ロック判定を最初に行なうことで、ロック中の利用者に対して認証コードを発行せず、メールも送信しません。判定を後段に置くと、ロックされたアカウント宛に無制限にメールを送信できる状態になります。

6.3 ACT-02:認証

  1. 入力値を変数へ格納する
  2. 入力形式を判定する。6桁の半角数字でない場合は E-05 を表示し、失敗回数を加算せずに SCR-02 に留まる
  3. ユーザーマスタのレコードを取得する
  4. 有効期限を判定する。現在日時 − コード送信日時 が5分を超えている場合は SCR-03(有効期限切れ画面)へ遷移し、以降の処理を行なわずに終了する
  5. コードを照合する。入力値 = 認証コードフィールド の場合はステップ6へ、不一致の場合はステップ8へ進む
  6. ユーザーマスタのレコードを更新する
     ・認証コード ← 空(クリア)
     ・失敗回数 ← 0
  7. SCR-05(ホーム画面)へ遷移して終了する
  8. 失敗回数を1加算してレコードを更新する
  9. 失敗回数を判定する。5回に達した場合はステップ10へ、5回未満の場合はステップ11へ進む
  10. ロック状態を「ロック中」に更新し、SCR-04(アカウントロック画面)へ遷移して終了する
  11. E-01 のメッセージと残り試行回数(5 − 失敗回数)を表示し、SCR-02 に留まる
判定の順序 有効期限(ステップ4)をコード照合(ステップ5)より先に行ないます。順序が逆になると、期限切れのコードに対して失敗回数が加算され、利用者が意図せずロックされる原因になります。

6.4 ACT-03:認証コードの再送

  1. ユーザーマスタのレコードを取得する
  2. ランダム関数により6桁の数字を生成し、変数へ格納する
  3. ユーザーマスタのレコードを更新する
     ・認証コード ← 生成した6桁
     ・コード送信日時 ← 現在日時
     ・失敗回数は更新しない
  4. メール送信アクションを実行する
  5. SCR-02(認証コード入力画面)へ遷移する

ACT-01 との違いは、失敗回数をリセットしない点のみです(FR-14)。再送で失敗回数が戻る仕様にすると、再送を繰り返すことで無制限に試行できる状態になるため、リセットはログインボタン押下時に限定します。

6.5 ACT-04:ロック解除(運用操作)

専用のアクションは作成せず、マスタアプリの標準的なレコード編集で対応します。

  1. システム管理者がマスタアプリでユーザーマスタの該当レコードを開く
  2. ロック状態を「解除」に変更する
  3. 失敗回数を0に変更する
  4. 保存する

この2フィールドはシステム管理者のみ入力可能に設定するため(5.2)、他の権限区分では解除操作を行なえません。

6.6 実装数量

No要素1アプリあたり5アプリ合計
1ページ(SCR-02・03・04)315
2アクション(ACT-01〜03)315
3ユーザーマスタへの追加フィールド4(共通マスタの場合は1回のみ)
4メール送信設定15

ユーザーマスタが5アプリ共通の場合、フィールド追加は1回で済みます。アプリごとに独立している場合は5回必要です。いずれであるかは、ソウゾウにて着手前に確認します。

6.7 事前確認事項

着手前に Platio Canvas 上で確認する項目です。すでに実績のある機能であれば確認は不要です。

ID確認項目用途
P-01ランダム関数で6桁の数字を生成できるかACT-01 ステップ3
P-02メール送信の本文に変数(生成したコード)を差し込めるかACT-01 ステップ5
P-03日時フィールドの差分を分単位で判定できるかACT-02 ステップ4
P-04ログインボタンの押下時にアクションを実行できるかACT-01 の起動
P-05認証画面から標準操作でホーム画面へ到達できないかFR-16(認証迂回の防止)
CHAPTER 07

セキュリティ上の留意点

この章の合意ポイント本方式で押さえるべき点を4つに絞って記載します。いずれも追加費用の発生しない、設定・実装上の配慮です。

7.1 認証コードフィールドの非表示(最重要)

必ず実施 認証コードは、いかなる権限区分でも画面に表示させません(5.2)。マスタアプリで他の利用者のレコードを閲覧できる権限がある場合、認証コードが見えると、パスワードを知る第三者がその利用者になりすませます。本機能の安全性は、この設定に依存します。

あわせて、レコード一覧のカード表示・検索結果・CSV出力など、フィールドが露出しうる箇所をすべて確認します。単体テストの必須項目とします(TST-06)。

7.2 認証成功後のコードのクリア

認証に成功した時点で認証コードフィールドを空にします(ACT-02 ステップ6)。クリアしない場合、同じコードで繰り返し認証できる状態が残ります。ログインをやり直せば新しいコードが発行されるため影響は限定的ですが、使用済みのコードを保持し続ける理由がないためクリアします。

7.3 有効期限判定に用いる日時

有効期限は「コード送信日時」と「現在日時」の差分で判定します。この現在日時が端末の時計を参照する場合、端末の日時を変更することで期限判定を回避できる可能性があります。

想定される影響評価
期限切れのコードを有効なものとして扱える限定的。コードを知っている必要があるため、単独では成立しない
期限を過ぎたコードでの認証コードはログインのたびに更新されるため、悪用の余地は小さい

実務上の影響は小さいため、本開発では対策を行ないません。Platio Canvas の現在日時がサーバー時刻を参照する仕様であれば、この論点自体が発生しません(P-03 で確認)。

7.4 認証を経ないホーム画面への到達

認証コード入力画面から Platio Canvas の標準操作でホーム画面や業務画面へ到達できると、OTPが形骸化します。

No想定される経路対策
1標準の戻る操作認証画面より前に業務画面を配置しない構成とする
2レコード一覧への直接遷移認証前の状態で到達しうる画面を洗い出し、遷移元を塞ぐ
3アプリの再起動起動時は必ずログイン画面から開始するため、迂回できない

P-05 で実際の挙動を確認し、単体テスト(TST-07)で網羅的に検証します。

7.5 本方式で対応しない事項

次の項目は本方式では対応しません。いずれも実装の複雑化に見合う効果が得られないと判断したものです。必要が生じた場合は追加開発としてご相談ください。

No項目不採用の理由
1認証コードのハッシュ化保存アプリ内で照合を行なうため、ハッシュ化すると比較処理を組めない
2再送回数の個別制限再送では失敗回数がリセットされないため、通算5回の上限によって既に制限されている(3.2)
3認証ログの記録ロック状態と失敗回数がユーザーマスタに残るため、事後確認は可能
4端末の記憶(一定期間の再認証省略)ログインのたびに認証する仕様とするため不要
CHAPTER 08

運用設計

この章の合意ポイント導入時と定常運用で、誰が何を行なうかを決めます。高田工業所様のご負担が発生する項目を含みます。

8.1 導入前に必要な準備

No準備事項担当
1Platio Canvas のメール送信元アドレスの確認と、必要な場合の設定ソウゾウ
2認証コードメールが社内メールフィルタを通過することの確認 C-01高田工業所様
3協力会社側のメール受信環境の確認(受信拒否設定の解除依頼) C-01高田工業所様→協力会社
4ロック解除の運用ルールと問い合わせ窓口の決定 C-02高田工業所様
5利用者向け案内文の作成記載内容:ソウゾウ/展開:高田工業所様
スケジュール上の注意 No.2・No.3 は開発期間よりも長くかかる可能性が高い項目です。開発と並行して着手いただく必要があります。特に No.3 は協力会社様への依頼を伴うため、早めの着手をお願いします。

8.2 利用者への案内が必要な事項

No案内内容対象
1ログインのたびに認証コードの入力が必要になること全利用者
2認証コードは登録メールアドレス宛に届き、有効期限は5分であること全利用者
35回失敗するとアカウントがロックされ、自力では解除できないこと全利用者
4ロックされた場合の問い合わせ先全利用者
5メールが届かない場合の確認手順(迷惑メールフォルダ、受信設定)全利用者
6期限が切れた場合は再送を行なうこと全利用者

既存スケジュールの「6. 運用マニュアル」への追記をご検討ください。

8.3 定常運用

No運用業務担当頻度
1アカウントロックの解除(マスタアプリでのレコード編集)高田工業所様(システム管理者)随時
2「認証コードが届かない」問い合わせの一次対応高田工業所様(システム管理者)随時
3ユーザーマスタのメールアドレスの保守高田工業所様随時

本方式は外部サーバーを使用しないため、ソウゾウ側での稼働監視・保守は発生しません。運用は高田工業所様の既存のマスタ管理業務の中で完結します。

8.4 想定される問い合わせと一次回答

問い合わせ確認事項一次回答
認証コードが届かない迷惑メールフォルダ/登録アドレスの正誤再送を案内する。改善しない場合はユーザーマスタのメールアドレスを確認する
コードを入れても通らない有効期限切れの可能性再送し、5分以内に入力するよう案内する
アカウントがロックされた失敗回数が5回に達しているマスタアプリでロック状態を「解除」、失敗回数を0に変更する
メールアドレスを変更したいユーザーマスタの登録内容既存の変更申請フローに従って対応する
CHAPTER 09

テスト計画

この章の合意ポイント単体テスト(ソウゾウ)と結合テスト(ふえん様)の境界、および提出物を確定します。

9.1 役割分担

テストレベル実施目的成果物
単体テストソウゾウ画面・アクション単位で、仕様どおりに動作することを確認する単体テスト仕様書、単体テスト結果報告書(エビデンス付き)
結合テストふえん様業務シナリオを通した動作、既存機能への影響を確認し品質を担保する結合テスト仕様書・結果(ふえん様作成)
受入テスト高田工業所様業務要件の充足確認

結合テストで検出された不具合のうち、原因が本開発範囲にあるものはソウゾウが無償で修正します。

9.2 単体テスト観点(ソウゾウ実施)

ID対象観点ケース数目安
TST-01ACT-01 ログインコードが6桁で生成される、レコードが更新される、失敗回数が0になる、メールが届く、ロック中は発行されない10
TST-02有効期限判定境界値(4分59秒/5分00秒/5分01秒)、送信日時が空の場合8
TST-03コード照合一致、不一致、他の利用者のコード、クリア済みコードでの認証8
TST-04失敗回数とロック境界値(4回目/5回目/6回目)、ロック後のログイン、ログインでのリセット、再送でリセットされないこと12
TST-05ACT-03 再送コードが更新される、送信日時が更新される、旧コードで認証できない、失敗回数が維持される8
TST-06権限設定全権限区分で認証コードが表示されないこと(レコード詳細・一覧・検索結果・CSV出力)12
TST-07認証迂回標準の戻る操作、レコード一覧への直接遷移、アプリ再起動での迂回不可を確認する8
TST-08入力チェック5桁/6桁/7桁/英字/空欄、形式誤りで失敗回数が加算されないこと8
TST-09メール件名・本文・差出人、コードの差し込み、到達時間、迷惑メール判定の有無8
TST-10ロック解除システム管理者による解除後、正常にログインできること4

合計 86ケース程度を想定しています。境界値は「規定値の直前・当該値・直後」の3点を必ず含めます。画面・アクションのテストは5アプリすべてで実施しますが、1アプリ目で仕様を確定させたうえで2〜5アプリ目は差分確認とし、記載ケース数は代表1アプリ分としています。

TST-06 は必須項目です 権限設定の確認は、本機能で最も重要なテストです(7.1)。ここが漏れると、機能は動作しているのに認証の意味が失われている状態になります。全権限区分・全表示箇所を網羅して確認します。

9.3 結合テストの推奨シナリオ(ふえん様向け参考)

Noシナリオ想定利用者
1ログイン → 認証コード入力 → 日報入力 → 提出 → 正常完了協力会社社員
2コードを4回誤入力 → 5回目に正しく入力 → 認証成功全区分
3コードを5回誤入力 → ロック → 管理者が解除 → 再ログイン全区分・システム管理者
4コード受領後6分経過 → 認証 → 期限切れ画面 → 再送 → 認証成功全区分
5ログイン → 3回失敗 → 再送 → さらに2回失敗 → ロックされる(再送でリセットされない確認)全区分
6ログイン → 3回失敗 → ログアウト → 再ログイン → 失敗回数が0に戻っている全区分
75アプリそれぞれでログインし、認証が正しく動作する社員作業管理者
8承認者による差戻し → 協力会社社員が修正・再申請(既存フローへの影響確認)承認者・協力会社社員
9既存の主要業務フローに影響がないこと(リグレッション)全区分

9.4 テスト環境の配慮

有効期限の検証 5分の経過を待つテストは効率が悪いため、テスト環境では有効期限を短く設定して検証します。本番リリース時に5分へ戻す作業を、リリース手順書のチェック項目に必ず含めます。

失敗回数の上限(5回)についても、テスト環境で一時的に2回等へ変更すると検証が容易になります。同様に、本番反映時の戻し忘れに注意します。

CHAPTER 10

見積・スケジュール

この章の合意ポイントお見積り ¥180,000(税抜)/5営業日の内訳と、その前提を明確にします。

10.1 工数内訳

No作業人日備考
1要件定義(本書の確定)0.25本書の作成により実質完了しているため
2ユーザーマスタのフィールド追加・権限設定0.25共通マスタの場合
3画面・アクション実装(1アプリ目)0.75SCR-02〜04、ACT-01〜03
42〜5アプリ目への展開1.00.25人日 × 4アプリ
5単体テスト・仕様書・結果報告書0.75ふえん様への提出物
合計3.0¥180,000(税抜)

設計工程は独立して設けず、本書をもって基本設計書とします。外部サーバーの構築・API開発・データベース設計が不要なため、この工数に収まります。

10.2 スケジュール(案)

Day工程主担当マイルストーン
D1要件定義(本書レビュー・未決事項の確定)、事前確認(P-01〜P-05)両社本書 Ver 1.0 承認
D2ユーザーマスタ改修、1アプリ目の実装ソウゾウ
D31アプリ目の完成、2・3アプリ目への展開ソウゾウ
D44・5アプリ目への展開ソウゾウ実装完了
D5単体テスト、仕様書・結果報告書の作成ソウゾウ単体テスト成果物の提出
D6〜結合テストふえん様結合テスト結果

導入前の準備(8.1)は、開発と並行して高田工業所様側で進めていただく前提です。

10.3 お見積りの前提

上記の金額・期間は、次の前提が成立する場合のものです。前提が崩れた場合は、速やかにふえん様へご連絡のうえ、変更管理(10.4)としてお取り扱いいただきます。

ID前提崩れた場合の影響
B-01事前確認 P-01〜P-04(ランダム関数・メール送信・日時差分・ログイン時アクション)がいずれも標準機能で実現できること代替方式の検討が必要となり、工数が増加する
B-02事前確認 P-05(認証迂回の防止)が成立すること全画面への個別対応が必要となり、工数が大幅に増加する
B-03ユーザーマスタが5アプリ共通であることアプリごとのフィールド追加が必要となり、0.5人日程度増加する
B-04対象アプリが5本であること1本増えるごとに 0.25人日(¥15,000)
B-05開発・テスト用の Platio Canvas 環境とテストアカウント(各権限区分1名以上)を利用できること環境準備の工数が発生する
B-06本書 Ver 1.0 承認後、仕様変更が発生しないこと変更管理による別途お見積り

B-01・B-02 はD1(初日)に確認し、その日のうちにご報告します。成立しない場合も着手直後に判明するため、対応の選択肢が残ります。

10.4 変更管理

本書 Ver 1.0 承認後の仕様変更は、次の手順で取り扱います。

  1. ふえん様より変更依頼をご連絡
  2. ソウゾウにて影響範囲・工数・納期影響を2営業日以内に回答
  3. 合意のうえ変更を反映(追加費用が発生する場合は別途お見積り)
CHAPTER 11

決定事項・確認事項

この章の合意ポイント仕様はソウゾウにて決定済みです。ふえん様には内容のご確認をお願いし、高田工業所様への確認が必要な2点のみご回答をお願いします。

11.1 ソウゾウにて決定した仕様

次の項目はソウゾウにて決定しました。この内容で実装します。相違があればご指摘ください。

No項目決定内容該当
1認証コードの桁数6桁(半角数字)3.2
2認証コードの有効期限5分3.2
3失敗回数の上限5回。再送をはさんでも通算する3.2
4失敗回数のリセット契機ログインボタン押下時のみ3.2
5再送の回数制限個別には設けない3.2
6認証成功時の動作認証コードをクリアし、ホーム画面へ遷移するFR-10
7有効期限切れ時の失敗回数加算しないE-02
8入力形式の誤り時の失敗回数加算しないE-05
9有効期限切れの表示方法画面遷移とモーダルのいずれか。実装のしやすい方を採用する(挙動は同じ)4.1
10ロック解除の方法マスタアプリでのレコード編集。専用画面は設けない6.5
11認証コードフィールドの権限全権限区分で非表示5.2
12認証ログの記録行なわない。ロック状態と失敗回数で事後確認する7.5
13ユーザーマスタの構成確認5アプリ共通かどうかは、ソウゾウにて着手前に確認する6.6
14運用マニュアル・業務フロー図への反映記載内容はソウゾウが提供し、反映はふえん様にて実施する8.2

11.2 ご回答をお願いしたい事項

高田工業所様の環境・運用に依存するため、ソウゾウでは決められない項目です。この2点のみご回答をお願いします。

ID確認事項必要な理由期限
C-01Platio Canvas からの認証コードメールが、高田工業所様および協力会社様のメール環境で受信できるか受信できない場合、ログインそのものができなくなる。受信拒否設定の解除等が必要になる可能性がある着手前
C-02アカウントロック解除の問い合わせ窓口(アカウントロック画面に表示する連絡先)ロックされた利用者の復帰手段を画面上に示すため実装開始まで

あわせて、メールの差出人名・件名・本文(3.3)につきましては案を記載していますので、修正のご希望があればご指摘ください(C-03)。ご指摘がなければ記載の案で実装します。

11.3 前提条件

ID前提
A-01Platio Canvas にメール送信機能・ランダム関数が標準で備わっていること
A-02全利用者が、受信可能なメールアドレスをユーザーマスタに登録していること
A-03認証コードメールが、高田工業所様および協力会社様のメール環境で受信できること
A-04開発・テスト用の環境とテストアカウントを利用できること
A-05ユーザーマスタへのフィールド追加が可能であること(既存データへの影響がないこと)

11.4 リスクと対応

IDリスク影響対応方針
R-01認証コードフィールドの非表示設定が漏れる単体テスト TST-06 を必須項目とし、全権限区分・全表示箇所を網羅して確認する
R-02認証メールが迷惑メールに振り分けられるテスト工程で高田工業所様・協力会社様の主要ドメイン宛の到達確認を実施する
R-03協力会社側でメール受信環境が整っていない導入前準備(8.1 No.3)として、協力会社様への事前確認を高田工業所様より実施いただく
R-04ロック解除の依頼が想定より多く、管理者の負担になる利用者への事前案内(8.2)を徹底する。多発する場合は上限回数の見直しを検討する
R-05事前確認(P-01〜P-05)で標準機能による実現が困難と判明するD1に確認し、当日中に代替方式を提示する
R-06Platio Canvas のバージョンアップにより実装が影響を受ける標準機能のみで構成するため、影響は限定的
APPENDIX

ふえん様へのご依頼事項

この章の趣旨本書の各章に記載した依頼事項を1か所にまとめたものです。ふえん様にお願いするのは本書のご確認と結合テストの2点です。それ以外はソウゾウにて実施します。

A.1 ご依頼事項

Noご依頼事項内容時期該当
1本書のご確認仕様に相違がないかご確認ください。ご指摘を反映したものを最終版として着手します着手前全章・11.1
2結合テストの実施単体テスト成果物の受領後、業務シナリオに沿った結合テストをお願いします。推奨シナリオは 9.3 に記載しています単体テスト完了後9.1・9.3

A.2 ご回答をお願いしたい事項

高田工業所様の環境・運用に依存するため、ソウゾウでは決められない項目です。この2点のみご回答をお願いします。

ID確認事項期限該当
C-01認証コードメールが、高田工業所様および協力会社様のメール環境で受信できるか着手前11.2
C-02アカウントロック解除の問い合わせ窓口(画面に表示する連絡先)実装開始まで11.2

メールの差出人名・件名・本文(3.3)は案を記載しています。修正のご希望があればご指摘ください。ご指摘がなければ記載の案で実装します。

A.3 高田工業所様にてご準備いただきたい事項

ふえん様よりお伝えいただきたい事項です。開発と並行して進めていただく前提としています。

No準備事項担当
1認証コードメールが社内メールフィルタを通過することの確認高田工業所様
2協力会社側のメール受信環境の確認(受信拒否設定の解除依頼)高田工業所様→協力会社
3ロック解除の運用ルールの決定高田工業所様
4利用者向け案内文の展開高田工業所様
ご注意 No.1・No.2 は開発期間よりも長くかかる可能性が高い項目です。特に No.2 は協力会社様への依頼を伴うため、早めの着手をお願いします。ここが間に合わないと、機能が完成していても利用開始できません。

A.4 ソウゾウにて実施すること(ご依頼は不要です)

No実施事項該当
1着手前の事前確認(P-01〜P-05)6.7
2ユーザーマスタが5アプリ共通かどうかの確認6.6
3ユーザーマスタへのフィールド追加・権限設定5.1・5.2
4画面・アクションの実装(5アプリ分)第4章・第6章
5単体テストの実施9.2
6単体テスト仕様書・結果報告書の作成と提出9.1
7結合テストで検出された不具合の修正(本開発範囲に原因があるもの)9.1
8運用マニュアルへの記載内容の提供8.2
9メール送信元アドレスの確認・設定8.1

A.5 進め方

No進め方
1本書のご確認は1回とします。ご指摘を反映したものを最終版とし、着手します
2着手初日に事前確認(P-01〜P-05)を実施し、当日中に結果をご報告します
3実装完了後、単体テストを実施し、仕様書と結果報告書を提出します
4結合テストで検出された不具合のうち、原因が本開発範囲にあるものは無償で修正します
5仕様変更のご依頼があった場合は、影響範囲・工数・納期影響を2営業日以内に回答します