OpenID Connect対応の認証サーバ(OP/IdP)を作るために調べてみた

More than 1 year has passed since last update.


動機


  • マイクロサービス化するにあたって、複数サービスに対して横断的な認証/認可の仕組みを作りたい

  • ユーザごとに設定された各サービス、各機能ごとの権限設定(認可情報)を一元管理したい


    • 自前でサービスプロバイダを用意する



  • OAuthとかOpenIDとか仕組みは なんとなく わかるけど、実際どうやって作るのか知りたい


概要


  • 2017/05時点、OpenID Connectは 1.0

  • OAuth2.0の上に構築されている 認証(identity layer) の仕様らしい


    • OAuth2.0で認可を請け負い、OpenID Connect1.0で認証を請け負う?



  • SAMLはXMLベースでWEBアプリケーション向け、OpenID ConnectはJSONベースでWEBアプリもモバイルアプリも想定している

  • OAuthでは認証側をIdP:Identity ProviderというがOpenID ConnectではOP:OpenID Providerと呼ぶ(が、IdP、サービスプロバイダという呼称も一般的なようで混在している場合がある)


実装について


Amazon IAMで作れるかな、と思ったが


各種ライブラリ


OP用

公式公認ライブラリと非公認ライブラリがある。

以下言語で扱いやすいライセンス(MIT/Apache2.0)のライブラリが揃ってる。


  • C#

  • Java

  • JavaScript

  • PHP

  • Python

  • Elixir - Uncertified

  • Go - Uncertified

  • Haskell - Uncertified

  • Perl - Uncertified

Uncertified(非公認)といってもGoだとCoreOS製のライブラリがあったりするので、それだけで過剰に心配する必要はなさそう。


RP用

対応言語は以下の通り。


  • C

  • C#

  • Erlang

  • JavaScript

  • PHP

  • Python

  • Ruby

  • Go - Uncertified

  • Java - Uncertified

  • Lua - Uncertified

  • Perl - Uncertified

意外にもJavaに公認RPライブラリがない。


動作環境



  • httpsの環境が必要なのでLet's Encryptで用意するか、Herokuなどを使う必要があるので試すのがちょっと面倒



    • 普通に証明書おいてもいいけど


      • と思ったけど動作確認には必須じゃなさそうだった






参考資料



次回に続く

試しにJavaScriptのpanva/node-oidc-providerで実装してみようと思います。

サンプルコードも結構豊富そうなのが助かる。panva/node-oidc-provider-example

実装してみました。

Node.jsでOpenID ConnectのOPとRPを実装してみた