Closed3

ユーザー認証について

ShionShion

ユーザー認証とは

多くのWebサービスでは、ユーザーごとに異なる機能を提供する。
例えば「ユーザーAは閲覧権限のみで、ユーザーBには閲覧権限に加え更新権限も持つ」といった機能はユーザーごとに異なる機能を提供する一例。

どう実現するか

HTTP はステートレスなプロトコルである。
これはつまり「同じパスへのリクエストには、常に同じレスポンスを返す」という性質を持つということで、「リクエ ストを送ってきたのが誰なのかを判別して、その相手によって異なるレスポンスを返す」というよ うな状態・条件を加味して返答を変化させる機能は本来 HTTP には備わっていない。
その ため「今リクエストを送ってきているのは誰なのかを判定する」機能を実現するために、ID トー クンというものを使ったユーザー認証の仕組みが考えられた。

その ID トークンを使ったユーザー認証で「身元が明らかになったユーザーのみ API を叩くことができる」ような機能を実現することができる。

ShionShion

ユーザー認証の流れ

ユーザー認証は、OpenID Connect という仕組みを使って実現させる。

OpenID Connect は、「どのユーザからリクエストを受けたのか」をIDトークンを通して識別する。これを利用することで SSO を実現することができる。

SSO とは、GooleアカウントやFacebookアカウントなど外部サービスのアカウントを使って「一つのアカウントで、複数のサービスにログイン」する仕組みのこと。

ちなみに「Google」や「Facebook」は OpenID Connect の用語でいうと IDプロバイダと表現される。

ShionShion

JWT

IDトークンは、JWT(Json Web Token)と呼ばれる形式で書かれている。

JWTは、以下の3つの構成要素から成る。

  • ヘッダー
  • ペイロード
  • 署名

ヘッダー部分は、署名部分からトークンの妥当性を検証するために必要な情報が格納されている。

ペイロード部分は、トークンに含ませたい情報(ユーザー名やメールアドレス等ユーザー識別に使う情報)が格納されている。

署名部分は、「base64 エンコードしたヘッダー」と「base64 エンコードしたペイロード」をカンマで繋いだ文字列を用意し、その文字列を、ヘッダーの alg キーで指定されていたアルゴリズムで 「署名する」作業を行い、その結果を base64 エンコードした情報が格納されている。

これらヘッダー、ペイロード、署名はbase64という方式でエンコードされ、URLに付加できる文字列になる。

このスクラップは10日前にクローズされました