JSON::WebTokenでOpenID ConnectのID Tokenを検証する方法

おはようございます、ritouです。

JWTへの注目の高まりを感じる

去年からJWT(JSON Web Token)に注目が集まっています。
http://oauth.jp/json-web-token-jwt

来月のJICS 2013でもJWTに関する基調講演がありますし、2日目のIdentity Technologies IntroductionではMichael B. Jones氏からJWT, JOSEの説明があります。

3月5日(火)基調講演にDeNA山口氏による「MobageオープンプラットフォームにおけるJWT活用」をプログラムに追加しました。

3/5基調講演にDeNA追加 - Japan Identity & Cloud Summit(学認シンポジウム, OpenID Summit)

渋谷のD社方面からJWTのかほりがぷんぷんするなーと思っていたわけですが、ライブラリも作られたようです。
にひりずむ::しんぷる - JSON::WebToken released

OpenID ConnectのID Tokenを検証

Acme::JWTというのが以前からあったわけですが、今後はこちらの方がメンテされるんじゃないかと思い、OpenID ConnectのID Tokenを検証してみました。
YConnectのようなHMAC-SHAxxxの署名つきのID Tokenの場合はPodを読めば簡単に動くので、RSAのほうのサンプルです。

以下のような処理を行います。

  • アルゴリズムRSA SHA-256を用いたID Tokenを受け取る
  • Discoveryなどで取得したPEM形式のX.509証明書から公開鍵を取り出して検証

サンプルに含まれるID Token, X.509証明書はこの前作ったOPのものです。
Discoveryの方法などが気になったらこちらを参照してください。

X.509証明書から公開鍵を取り出すあたりはOAuth 1.0の署名時代のノウハウを流用し、あとはdecodeを呼ぶだけです。
今回のOpenID Connectのユースケースに限らず、文字列長が気にならないユースケースであれば、JSONだけではなくいろいろなデータにさくっと署名をつけてやりとりできるので捗ります。

ぜひみなさんも触ってみたら良いかと思います。
ではまた!