summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2021-05-12 22:36:13 +0200
committerVivien Kraus <vivien@planete-kraus.eu>2021-05-12 22:36:13 +0200
commit70eb454bc21774b31bc0b17cb017bec831d5d695 (patch)
tree80ed9efe96e76bbe0c842adcebc0ba2a8aea322d
parente9db4a931eb3bc3af5742fea7bfd0bef27f4011b (diff)
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.
-rw-r--r--src/scm/webid-oidc/oidc-configuration.scm9
-rw-r--r--tests/oidc-configuration.scm30
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)))))))