以前、なんちゃってOpenID Connectサーバを立ち上げました。( なんちゃってOAuth2/OpenID Connectサーバを自作する )
それはそれで役に立っているのですが、OpenID Connectに準拠しているかどうかを確認するためのTest Suite があったので、物は試しで通してみました。
結果は、散々でした。Optional機能は実装していないので当然ではありますが。
Conformance Testing for OPs
https://openid.net/certification/testing/
テストの準備
まずは、準備として、テスト対象のエンドポイントのURLやサポートする機能を指定します。
https://op.certification.openid.net:60000/
New ボタンを押下します。
Issuerに、サーバで生成するトークンに含めるissの値を指定します。
Response Typeとして「code」を選択しました。
最後に、「Create」ボタンを押下します。
次は、各エンドポイントなどを指定します。
以下の値を指定することで、テストを開始できました。
・contact_email : 適当な値
・authorization_endpoint : 認証エンドポイント
・jwks_uri : 署名を検証するための公開鍵のエンドポイント
・token_endpoint : トークンエンドポイント
・userinfo_endpoint : USERINFOエンドポイント
・client_id : 適当な値
・client_secret : 適当な値
最後に、「Save & Start」ボタンを押下すると、テスト用のページに進みます。
いざ、テスト実施
左側の列にある再生ボタンを押下していくと、それぞれテストが実施されます。
結果はこんな感じです。
まあ、実装を手抜きしているので当然ですね。
右側の列にある「!」マークのボタンを押下すれば、実行経過やエラー理由が確認できます。
エラーとなった理由を列挙しておきます。
(OP-Response-Missing)
・エラーメッセージを返すべきだが、HTTPエラーステータスが返ってきている。Swaggerで必須パラメータを指定しているがそれがないため
(OP-ClientAuth-SecretPost-Static)
(OP-claims-essential)
(OP-nonce-code)
(OP-prompt-none-LotLoggedIn)
(OP-Req-acr_values)
(OP-Req-login_hint)
(OP-Req-max_age=1)
(OP-Req-max_age=100000)
・OpenID Connectの仕様上Optionalな機能であり、対応していません。
(OP-redirect_uri-NotReg)
・リダイレクトURIをチェックしていないため(手抜き実装)
(OP-Oauth-2nd)
(OP-OAuth-2nd-30s)
(OP-OAuth-2nd-Revokes)
・認可コードの期限チェックや利用済みのチェックをしていないため(手抜き実装)
(参考) OpenID Connect Core 1.0 日本語訳
http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html
終わりに
なんちゃっての実装でしたが、こうしてやって実施してみると、すんなり確認が通ってよかったよかった。
以上