Rso's Jotter

日々の開発の知見のメモやその他雑記

読書メモ 認証サバイバルガイド

ひっそりと書いているブログですが、意外に、xxxについて書いてたよねとか言ってもらえて、ひっそりと喜んでます。

せっかくなので読者になるボタンを表示してみました。はてなユーザの方は押してもらえると励みになりますのでお願いできればと思います。

さて今回は、Auth0が公開している認証サバイバルガイドを読みました。

auth0.com

概要

以下そのまま引用です。

本書は、認証に関わりはじめた方々に、初めの一歩としてお読みいただくことを目的としてつくられています。 認証を実装する際に出会うであろう全ての主要のプロトコル、フォーマット、コンセプトそして定義について、一通り説明しています。

まさになんとなく雰囲気で認証(Auth0)を触っている自分にふさわしいですね。 メールアドレスを登録すればPDFをダウンロードできます。

内容抜粋

以下自分の理解をざっくりかいたものです。間違っているかもしれません。

OAuth2.0

  • もともと認可のためのプロトコル。これによりアプリケーションがユーザのクレデンシャルを知らなくてもユーザのもつ外部リソースにアクセスできる許可が得られる。
  • 認証を目的にしているわけではないが、運用上認証の用途でも使われだした。
  • 細かい規定がないので、認証に関しては実装者の解釈によってあいまいになる部分が多かった。

Open ID Connect

  • 上述の問題をうけて OAuth 2.0 を拡張。 認証に関する内容も規定している。
  • OAuth 2.0 での曖昧な領域を形式化している。たとえば、トークンのフォーマットはIDトークンであればJWTにしないといけない、など。

SAML と WS-Federation

  • MS の Active Directory のような、クローズドネットワークでしか動かせないSSOを何とかすべく、登場した。
  • SAMLはXMLでやり取りし、SOAP全盛だった頃に合わせて流行っていたが今は HTTP, JSONベースの方が簡単で主流。
  • WS-* といろんなシリーズのプロトコルがあったが、 WS-Federationが一番まとも。

アクセストークン

  • OAuth2, OpenID Connect では、 以下のトークンのタイプがある。

    • アクセストークン
    • リフレシュトークン
    • IDトークン
  • 初めて学んだ人はなんでアクセストークンとリフレッシュトークンは別れているの?と思われる。主にセキュリティ上の理由だが以下の通り。

    • アクセストークンはリソースサーバに対して投げるが、リフレッシュトークンは認可サーバに対して投げる。
    • アクセストークンの有効期限は短くしたい。
    • リフレッシュトークンは寿命の長いクレデンシャルという意味では、パスワードに近い性質をもつ。なので保存方法もケアが必要。

トークンの保存

  • トークンの保存方法はいろいろあってそれぞれメリデメがある。
  • 一番スタンダードなのは ブラウザならLocalStorageだよね。

トラブルシューティング

  • トラブルシュートするにはHTTPの仕組み分かってると捗るよ。
  • HARファイルに保存したら再生できる。HARファイルにはパスワードも残るからユーザから取るときは気をつけて。

所感

おそらく本当に第一歩というはじめの部分だけなんだと思いますが、まとまっていてわかりやすいと感じました。

Auth0やFirebase Auth, AWS Cognito など 認証サービスがどんどんコモディティ化してくるような流れを感じる一方、 その裏の仕組みはいろいろ新しいものが登場してくるので、より初学者がキャッチアップが辛くなってくるんじゃないのかなと思っています。

そういうときに、こういう今までの流れと、いまどうなっているかを概説してくれる資料はありがたいです。