LoginSignup
35
30

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-18

動機

  • マイクロサービス化するにあたって、複数サービスに対して横断的な認証/認可の仕組みを作りたい
  • ユーザごとに設定された各サービス、各機能ごとの権限設定(認可情報)を一元管理したい
    • 自前でサービスプロバイダを用意する
  • 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を実装してみた

35
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
30