概要
- OpenID Connect Certification を取得するためには、 Conformance Test という Web で実施できるテストを実施して、結果を提出します
- ただ、 Web で公開されているテストだと、テスト対象の OP も Web に公開する必要があり、実装途中だったり仕様の理解が正確でないと、結構辛いです
- テストツールも含めて、すべてローカルに立ち上げてテストする方法をまとめています
- OP (OpenID Connect Provider) のテストを前提とした記事です
Conformance Test とは
- OpenID Connect の標準仕様にそった実装ができているかどうかを確認することができるツールです
- Web 上で実施でき、ここからいつでも誰でもテストを実施できます
- 実施方法の詳細は、公式サイト を参照してください
ローカルで立ち上げた OP のテストはできない
-
Web で公開されているテスト では、ローカルで立ち上げた OP のテストができません
- このテストは、対象の OP に対して、 テスト用の RP (Relying Party) を立ち上げて、 OpenID Connect のプロトコルに沿った認証・認可までできるかどうかをチェックするものです
-
Authorization Code Flow
のように、サーバ間通信を必要とするフローの場合、テスト時に立ち上がる RP (https://op.certification.openid.net:620xx/) から OP へアクセスできる必要があります
- OP が実装途中の場合、わざわざインターネットアクセスできるところに公開しないとテストができないので、テスト/デバッグ/修正がめちゃくちゃ辛いです
テストツールの Docker がある!
- Github に公開されていて、テストツール自体は簡単にローカルで起動できます
テストツールをローカルで起動する
(Readme に書いてある通りですが)
- checkout して
docker-compose up
$ git checkout stable-release-1.2.x
$ docker-compose -f docker/docker-compose.yml up
-
/etc/host
を書き換え
$ sudo vi /etc/hosts
---
+ 127.0.0.1 op-test op rp-test
-
http://op-test:60000
にアクセス- https://op.certification.openid.net:60000 と同じ画面が表示されます
テスト対象の OP をローカルで起動する
-
http://localshot
で起動しているとします
テストツールでテストを新規作成する
-
テスト新規作成画面 を開く
-
issuer に
http://host.docker.internal
を指定する (Docker for Mac を使っている場合)-
http://localhost
を指定すると、テストで起動する RP はテストツールの Docker コンテナ上にいるため、Docker ホスト上の localhost ではなく、 Docker コンテナ上の localhost を見に行ってしまいます - Docker コンテナから Docker ホスト上のプロセスを指定する必要があります
-
RP 側のログを見る
- テスト中にスタックトレースが表示されるようなエラーが起きた時に、実際に RP <-> OP の間でどういうリクエストとレスポンスがあったのかを見に行ったほうが早いです
$ cd ${conformance-test-root-dir}
$ cd ./docker
$ docker-compose exec op-test /bin/bash
# ここからコンテナ内操作
/usr/local/src/oidf/oidc_op# less server_log/rp_6000x.log