Choose your language: English, 日本語(Japanese). Or use the Google translation:

これは何?

Mozilla Firefox 用のアドオン。Privacy-Protected なログインまたは支払いを実現するための構成要素の一つ。

このアドオンは "A" タグや "INPUT hidden" タグで "pp-authorizer" クラスを持つものをチェックし、そのタグが示すリンクに遷移するよう促す。例えば OAuth の途中でこれを使うとよりセキュアになると私は考える。

どこで手に入れられる?

AMO (Mozilla Add-ons) のページにて。

ブラウザの拡張機能の標準である Web Extension 規格に順って作ったが、使えるブラウザは今のところ Firefox に限られるようだ。

匿名的な認証における問題

インターネット店舗や掲示板サイトの認証を他の認証プロバイダにまかせることで、インターネット店舗や掲示板サイトが保たせなければならないプライバシー情報をより少なくできる。インターネット店舗や掲示板がより低い信頼度でもユーザーが利用できるのがメリットとなる。「匿名的なログイン(プライバシーが保護されたログイン)」または「匿名的な支払い(プライバシーが保護された支払い)」をそれによって実現できるのだ。

このとき、掲示板等から認証プロバイダへ処理が流れる必要があるわけだが、より低い信頼度であるはずのサイトからより高い信頼度のサイトにリダイレクトするのには、なりすましの危険がある。

このなりすましを防止するには、より低い信頼度のサイトから高い信頼度のサイトへの自動的なリダイレクトを許さず、より低い信頼度のサイトがリダイレクトを望むときは、その旨をページに表示して、そのページに含まれたリンクが正しいものであることをチェックした上でそのリンクを辿るようなブックマークレットまたはアドオンがあればよい。

そのようなアドオンが、この PP Authorizer である。

PP Authorizer 導入の難しさ

上述のような匿名的な認証の実装例が OAuth であり、OAuth には上で指摘した問題がある。この問題を解決するのに PP Authorizer が使えるわけだが、そのためには、低い信頼度から高い信頼度のサイトへの自動のリダイレクトをやめるようサイトを変更する必要がある。

PP Authorizer が使えない環境では、ブックマークレットを使うよう促すことができるが、基本的にはユーザーの利便性を損う変更であるため、導入のハードルが高いものと考えられる。PP Authorizer の利用は、企業等の組織内での試験的な導入に限られるかもしれない。PP Authorizer の動作原理はとてもシンプルだが、導入が難しいのは残念に思う。

ただ、このアドオンの作者は、このような機能がブラウザに標準搭載され、すべてのサイトが上記のような自動的なリダイレクトをやめることを望んでいる。このアドオンには認証プロバイダとして Twitter と Hatena が最初から入っているが、最初から入っているプロバイダをさらに増やすことを望む組織…例えば銀行協会…などから寄付を募り、ブラウザの開発資金が潤沢になればと作者は夢想している。

認証プロバイダの登録

認証プロバイダの登録は、アドオンの設定画面か、ネット上に置かれた .ppauth.js ファイルを読むことによってなされる。

認証プロバイダに必要な情報は、二つで、一つは認証プロバイダの名称、もう一つは、認証プロバイダが認証に使う URL で、さらなる情報として、名称の前に付けるアイコンの data URL を登録することができる。(例外として、設定画面での登録については data URL でなくアドオンのパッケージに含まれているアイコンを指定できる。)

URL がチェックされるときは、基本的には前方一致であるが、続く文字は / か ? か & でなければならない。例えば、URL が https://example.com/oauth であったときは、https://example.com/oauth/XXXX や https://example.com/oauth?XXX=XXX に一致する。

ネット上に置かれた拡張子が .ppauth.js の JSON 形式のファイルがブラウザに読み込まれると、PP Authorizer は、認証プロバイダの情報をインストールするか尋ねる。(なお、拡張子が .ppauth.json ではなく .ppauth.js でなければならないのは、Firefox の制限による。) .ppauth.js ファイルは、name と url と iconUrl (オプショナル)からなる次のような JSON ファイルである。

{
  "name": "An Example Provider",
  "url": "http://example.com/oauth",
  "iconUrl": "data:application/ico;XXXX_VERY_LONG_URL"
}

PP Authorizer の実行

認証プロバイダに自動的にリダイレクトしないものの、手動でリダイレクトするようリンクを含むようなページを表示すべきだろう。そのリンクの A タグは pp-authorizer クラスを持っているべきである。例えば次のように。


....

<a href="https://example.com/oauth?key=XXXX" class="pp-authorizer">Click this link to redirect to the authority.</a>

....

リンクを A タグではなく、ボタンなどで実装したい場合もあるだろう。そのときは pp-authorizer クラスを持った INPUT hidden タグを使えばよい。例えば次のように。


....

<input type="hidden" value="https://example.com/oauth?key=XXXX" class="pp-authorizer" />

....

リンクを rel="pp-authorizer" 属性を持った LINK タグや A タグで示すのが、自然な実装に思える。そのように実装するのはとても簡単である。しかし、HTML 5 の標準は rel 属性に自由な拡張を認めていないため、このような形に留めた。

PP Authorizer はユーザーが訪れるすべてのページをチェックし、pp-authorizer クラスを持つ A タグや INPUT hidden タグがあればアドレスバー内へのアイコンの表示などで知らせる。アイコンをクリックすると、登録された認証プロバイダで現在利用可能なものが表示され、それをクリックすると、認証プロバイダにリダイレクトされることとなる。

PP Interrupter との共調

PP Authorizer に対応するページは当分の間ないであろう。では、どうするか? 認証の前でアドレスバーのアイコンをクリックしなければならないという点で、似た操作を実現する PP Interrupter を使えばよい。

PP Interrupter は、特定の URL へのアクセスを一旦ブロックし、アイコンのクリックによってそのブロックを解除するという汎用のアドオンである。

本当にやりたいのは、悪意のあるサイトへの自動的なリダイレクトを禁止することである。しかし、悪意のあるサイトへ導かれるかどうかは判定が難しい。そこで、逆転の発想で、判定が容易な健全なサイト(認証局)へのアクセスを一旦ブロックすることを習慣化し、ブロックがあるはずなのにないことによって、詐欺サイトに導かれたことを検知するようにするのだ。PP Interrupter はその目的で使うことができる。

PP Interrupter は自動的なリダイレクト以外のアクセスもブロックする。PP Authorizer でポップアップがクリックされたときのアクセスが PP Interrupter によってブロックされるのを避けるために、PP Authorizer と PP Interrupter は共調している。もし、その場合にブロックされているなら、PP Interrupter の設定画面で、Allowing Extensions の項目から PP Authorizer を間違って消してしまったのかもしれない。もし、そうなら、その設定画面で、New Extension ボタンを押し、次の情報を入力して Save すればよい。

name:         PP Authorizer
extension ID: {783dadb1-a4ec-46e7-a6de-26432b3393c2}

また、PP Interrupter がブロックする URL を PP Authorizer の認証局(Authorities)にしたい場合は、PP Interrupter の設定画面で Add from PP Authorizer ボタンを押せばよい。

PP Interrupter を使わなくても、認証の前に PP Authorizer を使うべきページでストップする世の中に将来なるほうがよい。PP Interrupter は現実への対応だが、PP Authorizer は未来への投資である。もちろん、PP Interrupter がなくても PP Authorizer は動く。

認証局

デフォルトで入っている認証局(Authorities)を .ppauth.js ファイルと共に示す。デフォルトの認証局を消してしまった場合は、こちらから登録することができる。ただし、その場合、普通は、設定画面の Add Defaults ボタンを使えばよい。ロケールによってデフォルトが異なるため、もしかすると手作業でこちらから登録する必要があるかもしれない。

Twittertwitter_oauth.ppauth.js
はてなhatena_oauth.ppauth.jsロケール: ja, en

はてな社や Twitter 社から特に何かをもらっているわけではなく、勝手に初期登録している。

なお、バージョンが上がったときにデフォルトの認証局が増えた場合は、その都度、その増えた分だけ追加されるはずである。

このアドオンは実験的

上に書いたような夢想はあるものの、現在のところこのアドオンは実験的なものに留まる。導入の難しさを超えて、利用してくれるユーザーには感謝するほかない。利用に致らないまでも、このアドオンに興味を持ち、問題を知ろうとしてくれるだけでもありがたい。

作者自身は特に組織に所属していないため、このアドオンを実験する機会にめぐまれていない。そのため、このアドオンの更新は滞りがちになると予想される。許していただきたい。

ご意見・ご要望は、作者のブログの一ページで受け付けている。日本語のサイトだが、英語でコメントを寄せていただいてもかまわない。なにぶん、個人のサイトなので致らないところは多々あると思う。ご寛恕いただければと思う。

(なお、このサイトの英語ページは日本語のページを逐次、Google 翻訳したものに手を加えたものである。)

License

The author is a Japanese.

I intended this program to be public-domain, but you can treat this program under the (new) BSD-License or under the Artistic License, if it is convenient for you.

Within three months after the release of this program, I especially admit responsibility of efforts for rational requests of correction to this program.

I often have bouts of schizophrenia, but I believe that my intention is legitimately fulfilled.

(Mozilla の配布ページでは、わかりやすさのため、BSD License にしているが、それを緩めた上記のライセンスで良い。)