プライベートの勉強は気が向くままにふらふらと。梅田の地下街を歩いてる感じで!(←つまり迷ってる)
元々は、Pivotal Japanさんの、この「今日から君もヒーローだ!」的なタイトルに惹かれてJava(Spring Cloud)でマイクロサービス作るぞーって進めてみたのであった。が、早速その2の「認可サーバーを立ち上げよう!」で「あー、これ知らない。分かんない。もう寝たい。」となってしまったのだった。
そんな僕が「なんとなく分かった!」になるまでの物語。・・・になるはず(ここを書いてる今はまだ分かってない)。
たぶん1ヶ月したら何を読んだか忘れてると思うので記録しとくことにした。
ゴール
OAuth 2.0って聞いたことあるけど、よく知らない。この辺、マイクロサービスの認証・認可部分で必要そうだなーって思うので、OpenID 2.0とOpenID Connectも含めて勉強してみることにした。
- OpenIDとかOAuthとかを提供する側じゃなくて、使う側の知識を勉強する。
- シングルページのアプリとかネイティブアプリとかじゃなくて、普通のWebアプリ限定でいいかな。
OpenIDとOAuthとOpenID Connectってどういう関係?
んで、どういう経緯があるんだろう?ってのはこちら↓が分かりやすかった。めっちゃ長いけど、今の僕に必要なのは「ここまでは前置きです」の部分までかな。
もうちょっと噛み砕いて理解したいなと思ってたところで、こちら↓を読んだ。ふむふむ。うーむ、なんとなく分かってきた気がするー。でも、最後のOpenID Connectのところはまだ全くピンときてないなー。ちょこちょこ見かけてたJWT(ジョットって読むらしい)も最後に少しだけ登場。
まずはOAuth 2.0からいってみよう!
これ↓が分かりやすかった。僕が知りたいのはAuthorization Code Grantってのみたいね。
www.slideshare.net
それから、これ↓も分かりやすかったな。
OAuth 1.0 と OAuth 2.0 の違い
そういえば、1と2でどう違うんだろう?ってのが気になって調べてみた。ふむふむ。OAuth 2.0だけ勉強すれば良さそう。
からの OpenID Connect!
やっとここまできたか。これまで「OpenID ConnectはOAuth 2.0の拡張だよ!」というような記述を見て「?」ってなってたけど、なんか分かってきた。
OAuth 2.0の仕組みに、IDトークンと、UserInfoエンドポイントが加わったってことなのかな。で、IDトークンには発行元とか発行先とか署名とかがある。と。クレームの部分はよく分かんないけど、まいっか。
結局、僕が分かりたかったものは分かりそうなのか!?
と思っておそるおそる見てみた。
security.oauth2.client.client-id=demo security.oauth2.client.client-secret=demo security.oauth2.client.scope=openid security.oauth2.client.authorized-grant-types=password,authorization_code
@RequestMapping(path = "/userinfo", method = RequestMethod.GET) Object userinfo(Authentication authentication) { return authentication; }
あぁ、なんとなく分かるぞー!!(∩´∀`)∩ワーイ