ログイン機能を設計する

技術系の記事を書くよりも食べ物の記事を書く方が楽なので逃げていましたが、Javaを忘れてしまいそうなので初心に戻ってログイン機能を作ろうと思います。

目次です。

ログイン機能

ユーザIDとパスワードをそれぞれフォームに入力し、送信ボタンを押下、ユーザIDがユーザ管理テーブルに存在し一意に定まったユーザIDにひもづくパスワード値が一致したらログイン成功としセッションを開始します。それ以外はログイン失敗としセッションは開始しません。ログインの失敗回数は気にしないことにします。

セッション管理

Webブラウザからのリクエスト、Webサーバからのレスポンスの通信により、ホームページが見れたりWebアプリケーションを利用することができます。このリクエスト、レスポンスと、それらの接続・切断の流れをまとめてセッションといいます。セッションにはユーザに依存する情報が乗ることが多いので、Webサーバから見たときにユーザを一意に識別することが必要です。そこで必要になるのがセッション管理です。今回実装する機能では、ログイン時にセッションを開始し、ログアウト時・ログイン後何かしらのサーバへのリクエストから15分経過しその間リクエストを出していない状態の時にセッションを閉じようと思います。

セッション管理の方法

JavaEEで使用できるセッションオブジェクトで管理する方法や、DBにセッション管理用のテーブルを用意して行う方法などがあります。今回は前者を使用しようと思います。

ユーザ管理

通常のWebアプリケーションで、会員登録やユーザ登録が必要な場合、ユーザの新規登録機能が必要ですが、今回はあくまでログインAPIの実装を目的していますので、用意したユーザ管理テーブルにはすでにユーザ情報が登録されていることが前提とします。

Webブラウザから送信されるパスワードの管理

WebブラウザからWebサーバ間の通信を盗聴されパスワードを盗まれてしまう可能性があるので、WebブラウザからWebサーバに送信するパスワード情報はSHA256で暗号化す流ことにします。

DB内でのパスワード情報の管理

ユーザ管理テーブルには、ユーザが指定した特定のパスワード情報が記録されますが、そのままのパスワードの文字列で記録すると、管理者にダダ漏れになってしまいますので、パスワード情報をDBに記録する場合はSHA256で暗号化し記録させることにします。

ユーザ管理テーブル

ユーザ管理テーブルの論理名と物理名はこうします。

論理名 物理名
ID Id
ユーザID UserId
パスワード Hash
備考 Remarks
削除フラグ IsDeleted
作成日時 CreatedAt
作成者 CreatedBy
更新日時 UpdatedAt
更新者 UpdatedBy

作ったらまた記事をあげたいと思います。あらためて考えるの楽しいですね。