Google・LINE でのログインはどう動くのか — OAuth をやさしく理解する

読了 4分

新しいサービスに登録しようとすると、「Google で続ける」「LINE で始める」といったボタンに出会います。押すと、新しいパスワードを作らずにすぐログインできます。ところが、このサービスは自分の Google のパスワードを知ることになるのでしょうか。幸い、そうではありません。

今回の記事では、ソーシャルログインがどう動くのか、その土台にある OAuth という仕組みを、コードなしで解きほぐしていきます。

ソーシャルログインは、パスワードを渡しません #

ソーシャルログインの核心から言うと、登録しようとするサービスは、自分の Google のパスワードを決して見られません。パスワードは Google にだけ入力され、サービスには渡されません。

代わりに Google が、そのサービスに対して「この人は私たちが確認したその人で間違いない」と保証してくれます。サービスは、パスワードを直接受け取って確認する代わりに、信頼できる Google の保証を受けてログインを処理するのです。自分のパスワードを新しいサービスごとにあちこちで教えなくてよいのは、ここに理由があります。

入場証を代わりに受け取る方式です #

この保証をやり取りする約束が OAuth です。ホテルにたとえると近いです。ホテルのフロントに身分証を見せると、フロントは自分の身分証そのものを客室の清掃係に渡しません。代わりに、客室のドアを開けられるカードキーを出します。清掃係はそのカードキーで決まった部屋にだけ入れるだけで、自分の身分証の情報は持ちません。

ソーシャルログインも同じです。身元の確認は Google というフロントで行われ、サービスはその結果として、一種のカードキーに当たるトークンを受け取ります。以前ログイン維持の話で、トークンが入場証の役を果たすと触れましたが、ソーシャルログインはその入場証を Google から代わりに受け取るわけです。

同意画面が核心です #

ソーシャルログインのボタンを押すと、Google や LINE の画面に移ります。パスワードを入力するのはまさにここ、つまり Google の画面です。登録しようとするサービスの画面ではありません。この区別が、ソーシャルログインが安全な理由の核心です。

このとき、「このサービスに名前とメールを提供することに同意しますか」といった画面も一緒に出ます。何を渡すかを自分で確認して許可する段階です。サービスは、自分が同意した範囲の情報だけを受け取れます。だから、あるサービスは名前とメールだけ、あるサービスはより多くの権限を求める、という違いが生まれます。

何を得て、何を得られないか #

サービスが受け取るのは、トークンと、自分が同意した範囲の情報だけです。ふつうは名前とメール程度です。トークンがあるからといって、自分の Google アカウント全体をのぞけるわけではありません。同意した範囲を超えたことはできません。

さらに、この許可はあとから取り消せます。Google アカウントの設定に入ると、これまで連携したサービスの一覧があり、その中の好きなものの連携を切れます。連携を切ると、そのサービスのトークンはもう通じません。鍵を渡したあとでも、いつでもその鍵を無効にできるわけです。

だから、ソーシャルログインを使うとき #

ソーシャルログインは便利ですが、一緒に見る点もあります。登録とログインが速く、サービスがパスワードを保管しなくてよいので、漏洩のリスクが下がります。一方で、その Google や LINE のアカウントに問題が起きると、そこに結びついたサービスにも一度に入れなくなることがあります。

作る側なら、本当に必要な情報だけ同意を得るのがよいです。過剰に多くの権限を求めると、ユーザーは登録の段階でためらいます。そして、この一連の過程は、通信を封じる HTTPS の上で行われてこそ安全です。

なぜ非開発者が知っておくと仕事が楽になるのか #

  • 安全な理由がわかります。 パスワードがサービスではなく Google にだけ入力されると知っていれば、ソーシャルログインがなぜ比較的安全かをユーザーに説明できます。
  • 権限の範囲を設計できます。 同意画面で求める情報が多いほど登録をためらうと知っていれば、本当に必要な範囲だけを求めるよう決められます。
  • 依存のリスクを見られます。 外部アカウントに結びつく構造だと知っていれば、自前のログインも一緒に置くかといった判断を前もって見積もれます。

まとめ #

今日は、ソーシャルログインが自分のパスワードをサービスに渡さず、Google の保証をトークンという入場証で代わりに受け取って動くことを見てきました。パスワードは Google にだけ入力され、サービスは自分が同意した範囲の情報だけを受け取り、その連携はあとから切れる、というのが肝心です。

トークンがどう入場証の役を果たすのか気になればログインするとなぜずっとログイン状態のままなのかを、この過程を支える HTTPS と暗号化が気になればアドレスバーの鍵マークは何を守っているのかを一緒に読んでみることをおすすめします。

X