週末ライダーの朝は早い

週末ライダーのバイク以外のメモ

OAuth認証を実装するときのざっくりとしたイメージ

前に書いたTwitterとはてなブログとの連携についてぼちぼちと実装を進めていて、とりあえずはてなのOAuth認証部分がクリアできました。
OAuth認証については各サービス、各言語ごとにライブラリが存在して、それを使えば簡単に実装ができてしまう、という印象があります。が、その流れくらいはざっくりとわかっていないとスムーズに実装できないなと思ったので、簡単にざっくりとしたイメージ(流れ)のメモです。
※OAuth認証時に必要なパラメータの詳細等については触れません。
※出てくる値の名称はサービスによって異なる場合があります

1. 認証の開始

必要な値

  • 各サービスで発行されたキー、シークレットキー
    はてなであれば、Hatena Developer Centerで確認できるOAuth Consumer Key, OAuth Consumer Secret の2つです。

やること

  • 上記2つの値を使って、各サービスの OAuth認証開始用のエンドポイントへリクエストを送る
    はてなの場合 https://www.hatena.com/oauth/initiate です。
  • レスポンスとして oauth_tokenoauth_token_secret の2つの値が返ってくるので、それらをセッションに保持する
    名前に oauth_ と付いていますが、これは最終的に欲しい tokentoken_secretリクエストするための token と secretです。request_token と言われることもあります。
    このあとサービスの認証画面にリダイレクトするので、これらの値はセッション等に保持しておく必要があります。

2. 各サービスの認証画面へリダイレクト、ユーザにログイン・認証させる

必要な値

    1. で取得した oauth_token

やること

  • oauth_token をパラメータに付与して、サービスの認証画面にリダイレクトする
    はてなの場合は https://www.hatena.ne.jp/oauth/authorize に GETパラメータとして oauth_token を付与してリダイレクトします。

3. 認証画面から callback url に戻ってくる

認証画面とは、Twitterの診断系Webアプリでよく見るあれです。
「このアプリがあなたのTwitterアカウントの情報にアクセスしようとしています。許可しますか?」 のような画面です。
ここでユーザは各サービスのアカウント情報でログインし、許可(承認)すると、あらかじめ設定しておいた callback_url に返ってきます。

やること

  • リクエストに使用する outh_verifier がパラメータに付与されているので、変数に保持する
    認証画面から返ってくる際に、tokenリクエストに使用する oauth_verifier という値がパラメータとして付与されているので、それを変数に保持します。

4. token、token_secret をリクエストする

必要な値

    1. で保持した oauth_tokenoauth_token_secret
  • oauth_verifier

やること

  • 上記値を使って、トークンリクエスト用のエンドポイントへリクエストを送る
    ここで、最終的に欲しい token と token_secret をリクエストします。はてなの場合 https://www.hatena.com/oauth/token にリクエストを送ります。
    リクエストに成功すると、レスポンスとして token と token_secret が返ってくるので、それらをセッション等に保持します。

あとは、この token と token_secret を使って各サービスのAPIを利用します。
以上、ざっくりとした流れはこんな感じです。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)