カテゴリー
technology

ソーシャルプラグイン開発環境のための設定

social-plugin.png
twitter、Facebook はもちろんのこと mixi や Gree へリンクを共有する仕組みを実現する機能を実装していたのですがちょいとはまりました。開発環境で動作確認を行っていると外部からのアクセス制限をかけている関係で各種ソーシャルサービスで正常に動作しません。
リンク共有のアクションを行うとソーシャルサイト側からコンテンツのチェックされ Open Graph Protocol のメタタグが読まれてリンク情報が表示されるという流れなので、Basic認証やIPアドレスなどのアクセス制限がされていると正常に動作しないわけですね。
対処方法ですが、すべてアクセス許可するのがOKなら問題ないわけですが、一般向けには公開したくないのであれば各ソーシャルサイトの共有機能からのアクセスだけ許可すれば良いです。
調べてみると各サービスでリンク共有すると以下のようなUserAgentでアクセスされることがわかりました。これでチェックすれば行けそうですね。

  • Twitterbot/0.1
  • Gree Social Feedback/1.0
  • facebookexternalhit/1.1
  • mixi-check/1.0


ということで、Basic認証はかけつつ特定のUserAgentだけはアクセス許可することができれば良いので、以下のような記述を httpd.conf 内のディレクティブ Diretory などに追加することになります。

AuthName "Restricted"
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
AuthType Basic
SetEnvIf User-Agent "Twitterbot" auth_free
SetEnvIf User-Agent "Gree Social Feedback" auth_free
SetEnvIf User-Agent "facebookexternalhit" auth_free
SetEnvIf User-Agent "mixi-check" auth_free
Satisfy Any
Require valid-user
Order allow,deny
Allow from XXX.XXX.XXX.XXX YYY.YYY.YYY.YYY \
env=auth_free

まず指定の UserAgent からのアクセスでは環境変数 auth_free をオンにするようにしておいて、その後 Satisfy で Basic認証とアクセス元制限のどちらかでOKにします。最後にアクセス許可する指定をIPアドレスやホスト名以外に env=auth_free を入れる、と。
これで指定IPアドレスとTwitter/Gree/Facebook/mixiのリンク共有機能からのみ認証無しでアクセス可能、それ以外はBasic認証にすることができました。
最後にそれぞれのサービス仕様紹介ページをまとめておきます。
http://developer.mixi.co.jp/connect/mixi_plugin/mixi_check/spec_mixi_check
http://developer.gree.co.jp/connect/plugins/sf
http://developers.facebook.com/docs/reference/plugins/like/
http://twitter.com/about/resources/tweetbutton