プログラミング

【今さら聞けない】ログインの仕組みと用語を解説

どうも、Kohei(@koheinishino_)です。

普段全く気にしてなかったけど、ログインってどういう仕組みで動いているんだろう?

ログインの仕組みや用語を理解できるようになりたい!

という方は意外と多いのではないでしょうか?

エンジニアの方に限らず非エンジニアの方でも、普段全くWebサービスを利用していない人はほとんどいないかと思います。そして、Webサービスを使っているということは十中八九ログイン機能を使っているはずです。

ですが、ログイン機能を使っている人の中でログインの仕組みについて説明できる人はあまりいないのではないでしょうか。非エンジニアの方はもちろん少ないと思いますが、エンジニアの方であっても説明できる人は少ないと思います。

本記事ではログインの仕組みや頻出用語について解説していきます。はじめに「そもそもログインって何なのか?」という部分から説明し、その後は具体的なログインの仕組みを知っておくべき用語とともに解説します。

記事を読み終わった頃には、ログインの仕組みや用語についてザックリと理解できるようになっているはずです!特にエンジニアの方は知っておかなければならない知識だと思うので、是非ご覧ください!

なお本記事の内容はWebサービスの仕組みを何となくでも理解できている方向けとなります。理解できるか不安な方は、本記事の前に下記の記事をお読みいただければと思います。Webサービス全体をザックリ解説しております!

【今さら聞けない】Webサービスの仕組みと用語を解説 どうも、Kohei(@koheinishino_)です。 プログラミングを勉強し始めたけど、そもそもWebサービスの仕組みをあ...

また、下記のサイトを参考にさせていただきました!ありがとうございます!

そもそもログインとは?

ログインとは「あらかじめ登録しておいたアカウント情報を用いて個々人のデータにアクセスする認証作業」のことです。

基本的にはアカウントIDやメールアドレスなどの一意になる情報とパスワードの2つを設定することが多いですよね。

なぜログイン機能が使われるのかというと「ユーザーが誰なのかをWebサービス把握してもらう必要があるから」です。

LINEを例に説明すると、ユーザーがログインすることで初めてLINE側が

LINEさん

今この端末でLINEを使っているのは○○というユーザーだな。

という風に認識してくれます。

逆にログイン機能が存在しないとLINE側が誰に使われているのかを認識できないので、メッセージを送信しようと思っても誰から誰に送ればいいのか分からなくなります。

ここまではけっこう当たり前のことを説明しているので、

いやいや、今さら説明されなくても大体わかるよ!

と思われるかもしれませんw

まとめ①
  • ログイン:あらかじめ登録しておいたアカウント情報を用いて個々人のデータにアクセスする認証作業
  • ログイン機能が必要な理由:ユーザーが誰なのかをWebサービスに把握してもらう必要があるから

ログインの仕組み

ここまでは「そもそもログインって何なのか?」というテーマで、用語の意味やなぜWebサービスに必要なのかについて解説してきました。

ここからは具体的にWebサービスでよく使われるログインの仕組みについて解説していこうと思います。

普段、色々なサービスに何気なくログインしていると思いますが、なぜログアウトされるまでずっとログイン状態になっているのでしょうか?それを理解するには、まずプロトコルについて認識しておく必要があります。

プロトコル

プロトコルとは「通信における約束事」です。プロトコルは広義で使われますが、ここでは通信プロトコルを指しています。

プロトコルはよく会話で例えられます。自分が日本語で話しかけたときに英語で返答されたら困ってしまいますよね。現実の場合はその場の空気で「日本語で話しかけられたから日本語で返したほうがいいな」という風に暗黙の了解っぽくなります。

しかし、通信の世界では通信の種類ごとに決められたルールに則って通信が行われます。具体的には下記のようなプロトコルがあります。

FTP(File Transfer Protocol)ファイルを受け渡すときの約束事
HTTP(HyperText Transfer Protocol)Webサイトを閲覧するときの約束事
NTP(Network Time Protocol)ネットワーク経由で時刻を合わせるときの約束事

これはやや抽象的で理解が難しいのですが、とりあえずは

そういう風になってるんだー

くらいの理解で大丈夫です。そしてWebサイトでは、HTTPというプロトコルに従って通信が行われています。

つまり、ログインもHTTP通信の中で行われていると言えます。しかし、このHTTP通信はステートレス(stateless)な通信と呼ばれており、ページが切り替わる際に前の状態を毎回覚えているわけではありません。

要するにこのままだと、ページが切り替わるたびに毎回ログインする必要があるということです。ショッピングサイトで例えると、商品をカートに入れてページを遷移させた場合、サーバーは誰が商品をカートに入れたのか覚えていないのです。

ステートレスな状態でもログイン機能を実現するためにはどうすればいいのでしょうか。結論、Cookieセッションという仕組みが使われます。

Cookieとセッション

Cookie

Cookieとは「WebサーバーからWebブラウザに渡される情報」です。HTTP Cookieが正式名称ですが、Cookieと略して呼ぶことが多いです。

CookieはクライアントのWebブラウザに保存されます。このCookieという機能を使ってログイン状態の保持を実現するための仕組みがセッションです。

セッション

セッションとは「一連の処理の始まりから終わりまでを表す概念」です。ここではHTTPセッションのことをセッションと略して使用します。

ログイン処理の場合、ログインからログアウトまでをセッションとして扱うことが多いです。

ログインのリクエストが送信されると、サーバーはログインページをリクエストしてきたユーザーを識別する情報としてセッションIDを生成します。セキュリティの観点から、セッションIDはランダムかつ長い文字列であることが一般的です。

そのセッションIDをCookieに保存しておき、HTTP通信の際に使用することでログイン状態が保持されるというわけです。

そして、ログアウトしたときや有効期間を過ぎたときにセッションIDがCookieから削除されます。これがセッションの終了を意味します。

ここまでの内容をまとめると、IDとパスワードを入力してログインするまでの流れは下記のようになります。

  1. クライアントはログインページでIDとパスワードを入力し、ログインするためのリクエストを送る。
  2. サーバーは登録されているアカウント情報と送信されたID・パスワードが一致するかを確認する。
  3. IDとパスワードが一致すればログイン完了後のページをレスポンスで返す。その際に、リクエストしてきたユーザーを識別する情報(セッションID)が書かれたメモ(Cookie)を発行する。
  4. クライアントはWebブラウザにサーバーから発行されたメモ(Cookie)を保存する。
  5. 以降の通信ではリクエストの際にセッションIDがサーバーに送信されるため、クライアントのログイン状態が保持される。

ちなみにネットカフェ等で共用のPCを使用する際は、帰る前にCookieをすべて削除しておきましょうと言われています。ログインしっぱなしの状態のブラウザを他の人に使われてしまうかもしれませんからね。

まとめ②
  • プロトコル:通信における約束事
  • Cookie:WebサーバーからWebブラウザに渡される情報
  • セッション:一連の処理の始まりから終わりまでを表す概念

まとめ:ログインの仕組みを簡単に説明できるようになっておこう

普段何気なく使っているログインですが、エンジニアであっても説明するとなると意外とできない人が多いと思います。私もその一人でした。

ここまで書いておいて何なのですが、ログインの仕組みを説明する機会はそんなにないと思いますw

しかし、普段何気なく使っているけど説明はできないような用語ってたくさんありますよね?それらを自分の言葉で一度再定義してみると、説明する機会があればスラスラ説明できますし、そのことについての復習にもなるのでオススメです。

特にキャリア初期のエンジニアの場合、面接や面談で能力を測るために基本的なIT用語の説明をお願いされるときもあるので対策しておきたい部分ですね。

ABOUT ME
Kohei Nishino
Web系エンジニア、ブロガーです。新卒未経験で開発エンジニアとして大手SIerに入社し約2年で退職→派遣エンジニアとして半年間インフラ構築業務→2020年11月から転職活動中。現在はDevOps系の技術を勉強しており、主にRails、AWS、Docker等の学習内容を発信しています。