From 70eb454bc21774b31bc0b17cb017bec831d5d695 Mon Sep 17 00:00:00 2001 From: Vivien Kraus Date: Wed, 12 May 2021 22:36:13 +0200 Subject: Advertise the conformance of Solid-OIDC As the latest Solid-OIDC specification suggests, the identity provider needs to advertise its support for Solid-OIDC in its discovery resource. --- src/scm/webid-oidc/oidc-configuration.scm | 9 ++++++--- tests/oidc-configuration.scm | 30 ++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/scm/webid-oidc/oidc-configuration.scm b/src/scm/webid-oidc/oidc-configuration.scm index 5252917..99a4e17 100644 --- a/src/scm/webid-oidc/oidc-configuration.scm +++ b/src/scm/webid-oidc/oidc-configuration.scm @@ -71,9 +71,12 @@ (apply get-jwks (oidc-configuration-jwks-uri cfg) args)) (define-public (serve-oidc-configuration expiration-date cfg) - (values (build-response #:headers `((content-type . (application/json)) - (expires . ,expiration-date))) - (stubs:scm->json-string (the-oidc-configuration cfg)))) + (let ((with-solid-oidc-supported + (acons 'solid_oidc_supported "https://solidproject.org/TR/solid-oidc" + (the-oidc-configuration cfg)))) + (values (build-response #:headers `((content-type . (application/json)) + (expires . ,expiration-date))) + (stubs:scm->json-string with-solid-oidc-supported)))) (define*-public (get-oidc-configuration host #:key diff --git a/tests/oidc-configuration.scm b/tests/oidc-configuration.scm index b4635b7..6c613b3 100644 --- a/tests/oidc-configuration.scm +++ b/tests/oidc-configuration.scm @@ -2,9 +2,11 @@ (webid-oidc jwk) (webid-oidc cache) (webid-oidc testing) + ((webid-oidc stubs) #:prefix stubs:) (web uri) (web response) - (srfi srfi-19)) + (srfi srfi-19) + (ice-9 receive)) (with-test-environment "jwks-get" @@ -113,4 +115,28 @@ (unless (oidc-configuration? cfg) (exit 3)) (unless (jwks? jwks) - (exit 4)))) + (exit 4)) + (let ((my-oidc (make-oidc-configuration + "https://example.com/keys" + "https://example.com/authorize" + "https://example.com/token"))) + (receive (response response-body) + (serve-oidc-configuration (time-utc->date (make-time time-utc 0 3600)) + my-oidc) + (unless (eqv? (car (response-content-type response)) 'application/json) + (exit 5)) + (let ((parsed (stubs:json-string->scm response-body))) + (unless (oidc-configuration? parsed) + (exit 6)) + (unless (equal? (assq-ref parsed 'jwks_uri) + "https://example.com/keys") + (exit 7)) + (unless (equal? (assq-ref parsed 'authorization_endpoint) + "https://example.com/authorize") + (exit 8)) + (unless (equal? (assq-ref parsed 'token_endpoint) + "https://example.com/token") + (exit 9)) + (unless (equal? (assq-ref parsed 'solid_oidc_supported) + "https://solidproject.org/TR/solid-oidc") + (exit 10))))))) -- cgit v1.2.3