2018-01-09

【認証】OAuth認証をBasic認証と比較して何がよいのか調べてみた

# OAuth認証とはなにか 

OAuth認証に仕組みがわからなかったので調べたことのまとめ。
Basic認証と何が違うのか、どんなメリットがあるのか書いてみた。


  • あるWebサービスに別の外部サービスを利用して認証の仕組み
    • News Picksにログインするときにツイッターのアカウントを利用してログインするのはOAuth
    • Webサービスが別の外部サービスに「そのサービスでユーザーが使っているこの情報の提供を許可してくれない?」と聞いて、ユーザーが許可したら、その別の外部サービスからデータをとる許可証をWebサービスに提供するって仕組み

# Basic認証とは

  • あるWebサービスに、ユーザーIDとパスワードを渡して認証する仕組み
    • よくある、e-mailとpasswordを入力するとログインできるような仕組み
    • 実はbase64認証という、暗号化を行っているので、一応Webサービス上には暗号化された暗号化された状態には保持されるんだって
    • ただ、その暗号化されたものは割と簡単に解読されてしまうんだってさ

# OAuthを使うメリット


  • ユーザー
    • IDとパスワードをクライアントアプリに預けなくてもよいので、クライアントアプリに全権限を与えなくてもよい(セキュリティ)
    • クライアントアプリに与える権限を事前に確認できる(セキュリティ)
    • ユーザの登録の手間の減少
  • クライアントアプリ
    • 複数のコンシューマが接続している場合、それらコンシューマのアクセス管理(ルールの変更、削除など)をサービスプロバイダ上で一元管理できる
    • 自サービス上でユーザ情報を管理しなくても、ユーザ情報が利用できる(セキュリティ問題の回避)
    • 嘘プロフィールの減少(例:TinderやPairsはFacebook Authのみを利用許可しているので、さくらが少ない)
    • シェア等が増える可能性(例:Pengeeeはauthのおかげで利用が楽になった)


セキュリティの面と、利便性の面があるみたいですね。利便性の面は面白くて、例えば出会い系だとOAuth認証を使ったほうが良い点は、なりすましが減って質の高いアカウントのみが登録しやすいってところだと思います。


特にPairsはFacebookのOAuthのみしか対応していないのですが、認証後も友達数をPairsは取得しているので、そこからユーザー数の質が担保されるということで、こういうところでもOAuthのメリットはあるみたいです。

# Basic認証と比べるとわかりやすいかも

Basic認証はユーザー名とパスワード入れてログインするあれ。それとOAuthを比較してみます。Basic認証だとできないこと、危ないことが多いです。


  • ユーザー
    • IDとパスワードをクライアントアプリに預ける必要があり、パスワード漏洩したらやられたい放題
    • 悪意のあるクライアントアプリに、パスワードを特定されて好き勝手されるかもしれない
    • ユーザの登録の際にメールアドレスとパスワードを入力しなければいけないので面倒くさい
  • クライアントアプリ
    • パスワードが漏洩したら、セキュリティリスク的に大変
    • 偽プロフィール作り放題(メールアドレスがあるだけ作り放題)

# OAuthの登場人物



  • クライアントアプリ, OAuth Consumer(Client) (例:Qiita)
    • OAuthで情報を利用する人(consume)だからOAuth Consumer
  • サービスプロバイダ, OAuth Service Provider,  (例:Twitter)
    • OAuthで情報を提供するからOAuth Provider
  • ユーザー, User


# Oauthの仕組み


  • ユーザーの行動
    • クライアントアプリでログインボタンをクリックする
    • サービスプロバイダの認証ページにリダイレクトされる
    • OKを押す
    • 認証完了
  • OAuthの処理
    • OAuth ClientはOAuth ServerにWebブラウザのリダイレクトを用いて認可要求を送る
    • OAuth ServerはOAuth Clientがアクセスを求めているユーザーデータについてユーザーに説明し, アクセス許可を得る
    • OAuth ServerはOAuth ClientにWebブラウザのリダイレクトを用いて認可コードを含む認可応答を返す
    • OAuth Clientは受け取った認可コードを用いてOAuth ServerにHTTPリクエストを送り, アクセストークンを取得する

# 参考




  • https://qiita.com/TakahikoKawasaki/items/200951e5b5929f840a1f
  • https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be
  • https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be
  • http://woshidan.hatenablog.com/entry/2015/09/07/081300
  • https://gblogs.cisco.com/jp/2017/05/the-oauth-attack-goes-mainstream/
  • http://alpha.mixi.co.jp/entry/2013/12020/
  • https://qiita.com/r7kamura/items/69904137ea20b6b86822
  • https://next.rikunabi.com/tech/docs/ct_s03600.jsp?p=002210
  • http://gihyo.jp/dev/feature/01/oauth/0001

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...