Commit 2b5ff8e

mo <mo@mokhan.ca>
2018-10-28 23:12:20
document the scim service provider config
1 parent 5840ff6
app/controllers/scim/v2/service_providers_controller.rb
@@ -3,6 +3,8 @@
 module Scim
   module V2
     class ServiceProvidersController < ::Scim::Controller
+      skip_before_action :authenticate!
+
       def show
         render json: configuration.to_json, status: :ok
       end
@@ -11,6 +13,7 @@ module Scim
 
       def configuration
         Scim::Shady::ServiceProviderConfig.build do |x|
+          x.documentation_uri = root_url + "doc"
           x.patch = false
           x.bulk do |y|
             y.supported = false
doc/_includes/get-well-known-oauth-authorization-server.html
@@ -34,7 +34,7 @@ Referrer-Policy: strict-origin-when-cross-origin
 Content-Type: application/json; charset=utf-8
 Etag: W/"7f1eee6ebfc3008c58d630548ed1707c"
 Cache-Control: max-age=0, private, must-revalidate
-X-Request-Id: 9b7d2784-27bf-4f48-af26-3a4bcd2d63ab
+X-Request-Id: bfd764ad-6661-4d3e-9155-66a817d13c51
 Transfer-Encoding: chunked
 ```
 
doc/_includes/oauth-dynamic-client-registration.html
@@ -6,7 +6,7 @@ Example curl request:
 ```bash
 $ curl http://localhost:5000/oauth/clients \
   -X POST \
-  -d '{"redirect_uris":["https://durgan.us","https://russel.biz"],"client_name":"Tristan Kassulke","token_endpoint_auth_method":"client_secret_basic","logo_uri":"https://lakin.ca","jwks_uri":"https://macejkovic.info"}' \
+  -d '{"redirect_uris":["https://lueilwitzkihn.us","https://thompson.biz"],"client_name":"Quiana Funk","token_endpoint_auth_method":"client_secret_basic","logo_uri":"https://rutherford.co.uk","jwks_uri":"https://armstrong.co.uk"}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
@@ -26,13 +26,13 @@ Request Body:
 ```json
 {
   "redirect_uris": [
-    "https://durgan.us",
-    "https://russel.biz"
+    "https://lueilwitzkihn.us",
+    "https://thompson.biz"
   ],
-  "client_name": "Tristan Kassulke",
+  "client_name": "Quiana Funk",
   "token_endpoint_auth_method": "client_secret_basic",
-  "logo_uri": "https://lakin.ca",
-  "jwks_uri": "https://macejkovic.info"
+  "logo_uri": "https://rutherford.co.uk",
+  "jwks_uri": "https://armstrong.co.uk"
 }
 ```
 
@@ -48,8 +48,8 @@ Referrer-Policy: strict-origin-when-cross-origin
 Cache-Control: no-cache, no-store
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
-Set-Cookie: _proof=04c6b0b81443cf88e583a5636fc80969; path=/; HttpOnly
-X-Request-Id: cee60a63-094e-49cd-8db7-0b796ea40edd
+Set-Cookie: _proof=98f3aadf475f8b862d5d0d725522e136; path=/; HttpOnly
+X-Request-Id: e301c873-7ac7-4d00-9f5d-ecf7fad2155c
 Transfer-Encoding: chunked
 ```
 
@@ -57,13 +57,13 @@ Transfer-Encoding: chunked
 Response Body:
 ```json
 {
-  "client_id": "78844c24-318a-4970-9836-d4a4253e0337",
-  "client_secret": "b19nDaD4ZVgDRJkKm3VCN33f",
-  "client_id_issued_at": 1540767166,
+  "client_id": "e47b9f52-11ea-49bb-8e90-80ecc42fc78a",
+  "client_secret": "Ybx6TQ8zYtVhhhSPNH2MttkQ",
+  "client_id_issued_at": 1540768302,
   "client_secret_expires_at": 0,
   "redirect_uris": [
-    "https://durgan.us",
-    "https://russel.biz"
+    "https://lueilwitzkihn.us",
+    "https://thompson.biz"
   ],
   "grant_types": [
     "authorization_code",
@@ -72,10 +72,10 @@ Response Body:
     "password",
     "urn:ietf:params:oauth:grant-type:saml2-bearer"
   ],
-  "client_name": "Tristan Kassulke",
+  "client_name": "Quiana Funk",
   "token_endpoint_auth_method": "client_secret_basic",
-  "logo_uri": "https://lakin.ca",
-  "jwks_uri": "https://macejkovic.info"
+  "logo_uri": "https://rutherford.co.uk",
+  "jwks_uri": "https://armstrong.co.uk"
 }
 ```
 
doc/_includes/oauth-token-introspection.html
@@ -6,11 +6,11 @@ Example curl request:
 ```bash
 $ curl http://localhost:5000/oauth/tokens/introspect \
   -X POST \
-  -d '{"token":"eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzA3NjYsImlhdCI6MTU0MDc2NzE2NywiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2NzE2NywiYXVkIjoiY2EzMmNhOGMtZTg4Zi00Y2MwLWJhMzYtY2E4MTlkYmNjMGEzIiwianRpIjoiZTVjMjNmZDMtZmViNi00MGRhLWE2OGItNWRiODU4ZDEwY2E0Iiwic3ViIjoiZjY1M2QxOGUtYjliNi00M2ZjLWE4OTEtNWI5OGFiN2EzNWM2IiwidG9rZW5fdHlwZSI6ImFjY2VzcyJ9.knD4_DnanganmdG7SZLUNtXv2N4ayjXlLf0VDqn8E8KcV69YcAvkoFzoALo-nUbXDHaQdzffs7ywkycb6Fcy81KzyvhOe1pRpXUYC1k_764iKP0PujSuo9F3vvbRFL0QnQryhNAjFpkQ7EcnTWGRWz5HU5WDNACVJXTe6-NmvYhoqyIi-wiGSKvjpJpxSRPCUde0n_E76zes-Loyy7XlANBTum8YnOtgJHgC9pufyaCzZ9XiM76AL6UStMg5oJq45gzynjy8LWeTk_OSWZwHnqRODAUuuA53MVheZC01RLg04gk6kTdIJoMBBIKZNpJK6YqzmLXEaDpnEzicNU6t2g"}' \
+  -d '{"token":"eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzE5MDIsImlhdCI6MTU0MDc2ODMwMiwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2ODMwMiwiYXVkIjoiNjUyZGI5ODctNzgyOS00ZDJkLTk5NWUtYWVhNWIwYTVjYjkwIiwianRpIjoiNDQ2ZmVmZTEtYjI2Zi00YWYyLWE1NDgtOTJhNmE1MTNiMzgzIiwic3ViIjoiZTRiNjU4Y2YtZjliMi00YTc5LTkwMGEtMjgzN2JkZDQxODFlIiwidG9rZW5fdHlwZSI6ImFjY2VzcyJ9.ao_ifLg0pLZP_a6B0QZYKZrarfXLThkgFCKnfIYCt1bzhT9gavwt_711YF9Rnk8qXeNs8m-jhkuRvgO1QatA7JVSReCP1u0QyCKiGNVbCHiAJCppr76FS4LH2WchQa-w3oAC4om_pP44UZHLnI9qeQ0-KHOirFzZhuO962HT_S4yUF1pi-ILJ0bfuX0LheBHa9izziiIgQygwtLXAT9HWMIftH81R7fHJwfoE0L74SWDuWP7gi3xb1zGNDVbnU9pIxlZGuGL_4c7CZ8_ILDMsDPC9TVx3ciKe0dprazkXcfKqR8_r1-4s_0zlQhWviX9BIsp1cxi8Ynu1S6ikXU7hw"}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic ZjQ3MzFhN2YtZDc5ZC00YjYyLTlkMTMtNGRmNGJjMGIyMjY1OkVCZVk5TFoyRlVCcUZOQzJoR290cE53SA==" \
+  -H "Authorization: Basic OWFiZmIyZDMtYWUxNC00YjRiLThiMzgtYTI3Mjk1Zjk0Y2RhOnVoV05aeDdneDlaZ21Eb2ZmNWVITm5uMg==" \
   -H "Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
 ```
 Request Headers:
@@ -19,7 +19,7 @@ Request Headers:
 Accept: application/json
 Content-Type: application/json
 User-Agent: net/hippie 0.1.9
-Authorization: Basic ZjQ3MzFhN2YtZDc5ZC00YjYyLTlkMTMtNGRmNGJjMGIyMjY1OkVCZVk5TFoyRlVCcUZOQzJoR290cE53SA==
+Authorization: Basic OWFiZmIyZDMtYWUxNC00YjRiLThiMzgtYTI3Mjk1Zjk0Y2RhOnVoV05aeDdneDlaZ21Eb2ZmNWVITm5uMg==
 Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
 ```
 
@@ -27,7 +27,7 @@ Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
 Request Body:
 ```json
 {
-  "token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzA3NjYsImlhdCI6MTU0MDc2NzE2NywiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2NzE2NywiYXVkIjoiY2EzMmNhOGMtZTg4Zi00Y2MwLWJhMzYtY2E4MTlkYmNjMGEzIiwianRpIjoiZTVjMjNmZDMtZmViNi00MGRhLWE2OGItNWRiODU4ZDEwY2E0Iiwic3ViIjoiZjY1M2QxOGUtYjliNi00M2ZjLWE4OTEtNWI5OGFiN2EzNWM2IiwidG9rZW5fdHlwZSI6ImFjY2VzcyJ9.knD4_DnanganmdG7SZLUNtXv2N4ayjXlLf0VDqn8E8KcV69YcAvkoFzoALo-nUbXDHaQdzffs7ywkycb6Fcy81KzyvhOe1pRpXUYC1k_764iKP0PujSuo9F3vvbRFL0QnQryhNAjFpkQ7EcnTWGRWz5HU5WDNACVJXTe6-NmvYhoqyIi-wiGSKvjpJpxSRPCUde0n_E76zes-Loyy7XlANBTum8YnOtgJHgC9pufyaCzZ9XiM76AL6UStMg5oJq45gzynjy8LWeTk_OSWZwHnqRODAUuuA53MVheZC01RLg04gk6kTdIJoMBBIKZNpJK6YqzmLXEaDpnEzicNU6t2g"
+  "token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzE5MDIsImlhdCI6MTU0MDc2ODMwMiwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2ODMwMiwiYXVkIjoiNjUyZGI5ODctNzgyOS00ZDJkLTk5NWUtYWVhNWIwYTVjYjkwIiwianRpIjoiNDQ2ZmVmZTEtYjI2Zi00YWYyLWE1NDgtOTJhNmE1MTNiMzgzIiwic3ViIjoiZTRiNjU4Y2YtZjliMi00YTc5LTkwMGEtMjgzN2JkZDQxODFlIiwidG9rZW5fdHlwZSI6ImFjY2VzcyJ9.ao_ifLg0pLZP_a6B0QZYKZrarfXLThkgFCKnfIYCt1bzhT9gavwt_711YF9Rnk8qXeNs8m-jhkuRvgO1QatA7JVSReCP1u0QyCKiGNVbCHiAJCppr76FS4LH2WchQa-w3oAC4om_pP44UZHLnI9qeQ0-KHOirFzZhuO962HT_S4yUF1pi-ILJ0bfuX0LheBHa9izziiIgQygwtLXAT9HWMIftH81R7fHJwfoE0L74SWDuWP7gi3xb1zGNDVbnU9pIxlZGuGL_4c7CZ8_ILDMsDPC9TVx3ciKe0dprazkXcfKqR8_r1-4s_0zlQhWviX9BIsp1cxi8Ynu1S6ikXU7hw"
 }
 ```
 
@@ -43,8 +43,8 @@ Referrer-Policy: strict-origin-when-cross-origin
 Content-Type: application/json; charset=utf-8
 Etag: W/"78b558bd2357fbe7ad52804fb3af1b86"
 Cache-Control: max-age=0, private, must-revalidate
-Set-Cookie: _proof=8ea7bb679d2de763c50085f001ef990f; path=/; HttpOnly
-X-Request-Id: c11a58e6-15fc-4f72-b214-4b57525d5c06
+Set-Cookie: _proof=fc8ca5893c6374293b9ae355143bcad8; path=/; HttpOnly
+X-Request-Id: 42549cad-67a3-4165-98d6-88a0de62dda3
 Transfer-Encoding: chunked
 ```
 
doc/_includes/oauth-tokens-authorization-code.html
@@ -6,11 +6,11 @@ Example curl request:
 ```bash
 $ curl http://localhost:5000/oauth/tokens \
   -X POST \
-  -d '{"grant_type":"authorization_code","code":"9DHZXpAt3MgF1rbMpG2dLMgp"}' \
+  -d '{"grant_type":"authorization_code","code":"KG9YberKrDtVJdynpeoKENsD"}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic MzljNDI3NGUtNGM0Yi00NjNhLTk0MjAtMDg0ZTMyY2U3ZWE4OlViNW9jTG1vUHJ3dFU3ZDNLWVVKaGVxcQ==" \
+  -H "Authorization: Basic NjE1MWM4ZmEtMTg1MC00YmVmLTg5ZDktNDMzYWNlZjNmOTY3OnVrcnF2ZzJvSzVQclk1ejlXdERHdDdkZg==" \
   -H "Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
 ```
 Request Headers:
@@ -19,7 +19,7 @@ Request Headers:
 Accept: application/json
 Content-Type: application/json
 User-Agent: net/hippie 0.1.9
-Authorization: Basic MzljNDI3NGUtNGM0Yi00NjNhLTk0MjAtMDg0ZTMyY2U3ZWE4OlViNW9jTG1vUHJ3dFU3ZDNLWVVKaGVxcQ==
+Authorization: Basic NjE1MWM4ZmEtMTg1MC00YmVmLTg5ZDktNDMzYWNlZjNmOTY3OnVrcnF2ZzJvSzVQclk1ejlXdERHdDdkZg==
 Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
 ```
 
@@ -28,7 +28,7 @@ Request Body:
 ```json
 {
   "grant_type": "authorization_code",
-  "code": "9DHZXpAt3MgF1rbMpG2dLMgp"
+  "code": "KG9YberKrDtVJdynpeoKENsD"
 }
 ```
 
@@ -44,9 +44,9 @@ Referrer-Policy: strict-origin-when-cross-origin
 Cache-Control: private, no-store
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
-Etag: W/"558d0d0e9c1732ba05fd0883b410194b"
-Set-Cookie: _proof=df4dec7203aaac011f3cdde7971a5024; path=/; HttpOnly
-X-Request-Id: c965720f-172d-4fc0-9e16-37bccf6b1b08
+Etag: W/"3dc9d40d9f0db7efcb0e1fc469f6b7cf"
+Set-Cookie: _proof=ffdf8c70a300174348cd6f72bc997f5b; path=/; HttpOnly
+X-Request-Id: d012fb07-2466-47c2-be58-b90cc6576e9d
 Transfer-Encoding: chunked
 ```
 
@@ -54,10 +54,10 @@ Transfer-Encoding: chunked
 Response Body:
 ```json
 {
-  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzA3NjUsImlhdCI6MTU0MDc2NzE2NSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjcxNjUsImF1ZCI6IjM5YzQyNzRlLTRjNGItNDYzYS05NDIwLTA4NGUzMmNlN2VhOCIsImp0aSI6Ijc0MjczODVkLTA3NGEtNGVhMi1hNGM4LTQ0MjRmMzJmY2I3YyIsInN1YiI6IjlmOGIxZGUxLTE5MTQtNGE0NC1iZWM1LWNkNTdkZjNjYWE0ZCIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.hDKTl4A_tjH7267J1ctJcsFsygWuj_yZvL9Tldr5DaGd2UJrThihnL36b61QpLCDMJKh69CmoMrLGee_wROYEU-ljpys0LRXQnaITAg3dEpdlFrDxdcIOGgwwYZTB74RTHtO4DD0QFXIK8mlGSyaur_HJQHXcrcvSERdHQj2SRJzkwomr13saYzkgQQBvpg8UoU0QY1bvRguGDVAI0f_vWRr14i0OTejJ8kS5l8ZtzbDJlQxSzyOlBEVsurOpACSFVfGP5YQcodZKmnR265cA30si725CaM4aO9I5_HPUcryOSpzyKs7xA7kDBPg9JryDQtlRlF1dtUzEuawS2Y_Ew",
+  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzE5MDAsImlhdCI6MTU0MDc2ODMwMCwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjgzMDAsImF1ZCI6IjYxNTFjOGZhLTE4NTAtNGJlZi04OWQ5LTQzM2FjZWYzZjk2NyIsImp0aSI6ImE0MTNkYjEzLWY5N2YtNGY3Yy05MjY5LTEyZjhhMjBhYjg2NSIsInN1YiI6ImU1ZWU1ODU0LWVkZDctNDA3Mi1iZjg0LTJhMTJhNzcyODM3NiIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.IHn9SGQXCl3KC6bXK91R8769vAETMZr5-MaIiunIJsi8xloBFzmBS7_5e8sqNpHg_6w3NfQohMxQ7yuWn-0xIBD-6tR7SsexFN2CVV6SmF0XfQGRmI6oP8zwKnrgFHUnPCQ0sfOI1dLvhonyrTMRbmgDiQfRguO9SAqgMU1lypth9SIQvz5d1IRHwKT2LXFHnL3Kj7ytYK2NTR7KdW8YjAzAmybOoRSdkrq0XcCPrXucmPXSUfjrbPlGUAFgahDXW0Z8FMWjunr671OMqLnoVy8Nt7CPllfxx78ehtPxfRRtlX9E-2NYZQG_08hg4Yp6HqXwBVf5-zGxQFiF0dNKTA",
   "token_type": "Bearer",
   "expires_in": 3600,
-  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA4NTM1NjUsImlhdCI6MTU0MDc2NzE2NSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjcxNjUsImF1ZCI6IjM5YzQyNzRlLTRjNGItNDYzYS05NDIwLTA4NGUzMmNlN2VhOCIsImp0aSI6ImU1MjkxNDZhLTg1ZmEtNDYyZi1iMzA2LWQ0M2Q2MmEzNWMwZSIsInN1YiI6IjlmOGIxZGUxLTE5MTQtNGE0NC1iZWM1LWNkNTdkZjNjYWE0ZCIsInRva2VuX3R5cGUiOiJyZWZyZXNoIn0.bfxt-vcz4tYAxqFlzaCQOWGxZ5M249MnYTjXjaXwraJePFt0K7hEkoopYNLCBtfokFPXgdwP7ey1DuA13KS87_Lcp6mUyWiMtc9Ubn_TI61Guf77LeKuZiKWEMZIPxNQMZZYq7mIlBBMItmQkH66Uk2hUFxfSICHdOw7siH8j2Q6U3iIY8W7pqJEmyAfsN09jmXKx4oMK60TYGah0_VH5FP4yopyBexuccOk7mAHHM1LGg48VtKitGL4t5HsdEsgmMASDx4AuLSHRvMTr6yHzmKtsjNQcdNNhSqlCOSahNeH0BuYdb2ROZO8HOYXsUausGGmWdVHCcCQ6pr79Tr8pA"
+  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA4NTQ3MDAsImlhdCI6MTU0MDc2ODMwMCwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjgzMDAsImF1ZCI6IjYxNTFjOGZhLTE4NTAtNGJlZi04OWQ5LTQzM2FjZWYzZjk2NyIsImp0aSI6ImU4NjkwOWI4LTg3MmItNGRiZC05OTE5LWI0MTgxMTE4MmM1NyIsInN1YiI6ImU1ZWU1ODU0LWVkZDctNDA3Mi1iZjg0LTJhMTJhNzcyODM3NiIsInRva2VuX3R5cGUiOiJyZWZyZXNoIn0.ZtaqstL5DwJqG4T3wPNiM32HUzGyL9z1ZCfPDTSNgeKjGie3xRlxlCnFv5FpT994ZQBUzCbSp1eRC02FXCh21cjb80oevy6bvog3xAcdFY0y7yPgcfoOpv3g-rLHNwpsJfHkcIbj5BipDM34ro53A0yUoGTZOVopKGgT0y3DK2gjxFUZAwOxWTJrp_Vad599Jh-rZ8CoqspFuqXR0GSy1q4FlQfixJNI9FtqXD0RnUc42Aj1-gCXsBcGYmhWHtDzmRvxbyz6K_MXelpMu3LWrkBirkaMr0_9cdiT-WtG2zc5tKvxGUSelY-GhYKDhWVxFSZ9ioiYvXc_xsVCaLpwtw"
 }
 ```
 
doc/_includes/oauth-tokens-client-credentials.html
@@ -10,7 +10,7 @@ $ curl http://localhost:5000/oauth/tokens \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic MDFkODgyNTAtZGUxMS00ZTk4LTkxNjUtYWU5ZTg4ZTI4YmUzOjFodjVlWTRKNWdhdGJrVldzZDRaaExzRg==" \
+  -H "Authorization: Basic ZWQwYTQ3YzgtODBjOS00YmI0LWJhNWQtYzA4MzY1YTRhMTZkOmQ4ZWI2SmFDWFF5NndjQWhqVjhpVUE4dQ==" \
   -H "Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
 ```
 Request Headers:
@@ -19,7 +19,7 @@ Request Headers:
 Accept: application/json
 Content-Type: application/json
 User-Agent: net/hippie 0.1.9
-Authorization: Basic MDFkODgyNTAtZGUxMS00ZTk4LTkxNjUtYWU5ZTg4ZTI4YmUzOjFodjVlWTRKNWdhdGJrVldzZDRaaExzRg==
+Authorization: Basic ZWQwYTQ3YzgtODBjOS00YmI0LWJhNWQtYzA4MzY1YTRhMTZkOmQ4ZWI2SmFDWFF5NndjQWhqVjhpVUE4dQ==
 Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
 ```
 
@@ -43,9 +43,9 @@ Referrer-Policy: strict-origin-when-cross-origin
 Cache-Control: private, no-store
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
-Etag: W/"4fac5f0230887dc310087f9ecd145384"
-Set-Cookie: _proof=fe4a1611fef957ba906e19a367ca4fc0; path=/; HttpOnly
-X-Request-Id: 7e0b5752-ab4b-4528-bc05-fc6c5e6497b0
+Etag: W/"9094d059ab60a1bdd8c0ea110f2514ad"
+Set-Cookie: _proof=f132eaa0d125ae46db8a1a3812e16df6; path=/; HttpOnly
+X-Request-Id: d80a0422-d867-4d2d-a2c6-2c1601762f1f
 Transfer-Encoding: chunked
 ```
 
@@ -53,7 +53,7 @@ Transfer-Encoding: chunked
 Response Body:
 ```json
 {
-  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzA3NjUsImlhdCI6MTU0MDc2NzE2NSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjcxNjUsImF1ZCI6IjAxZDg4MjUwLWRlMTEtNGU5OC05MTY1LWFlOWU4OGUyOGJlMyIsImp0aSI6ImIxYzY3YzRhLWJkODctNDVhNy04MDEzLWY0ODZjODZmZTEwMSIsInN1YiI6IjAxZDg4MjUwLWRlMTEtNGU5OC05MTY1LWFlOWU4OGUyOGJlMyIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.U7t8Qxo_VF2ycPemEvIW32wgAkPcqTJliEg6cU7osGNRe4pXOFs0KjLSdFhO7XoGwMhbaMEl6GKGZueCyKWhh-UHLq2uINgiOBgxULgNomRIENtksWYOzaM8JdR9URLdOEOGazdgXALG77ERk8FyC93uAdOaccVVZO2JRAcq6yHm-5SCwfHL7V5yrj-G4Zct-F6JCNZ6C4YfBkxG6m9P9_d9cw36eEKhtAZ7MaqQiFaUwdLRraAA9OQvtcctspyHSJBIgYjAtYWqDyrWfHxl2hFbvjzJjHFTg1Weqb3ZMOaDSEcoO_kdyX5-G1lBtnhw9kqs3tku-4R969W8-jpMvg",
+  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzE5MDEsImlhdCI6MTU0MDc2ODMwMSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjgzMDEsImF1ZCI6ImVkMGE0N2M4LTgwYzktNGJiNC1iYTVkLWMwODM2NWE0YTE2ZCIsImp0aSI6ImUwYmVhOTc0LTY5YWItNDZhMC04N2RhLTkyMzdmZmQ5Yjk3NCIsInN1YiI6ImVkMGE0N2M4LTgwYzktNGJiNC1iYTVkLWMwODM2NWE0YTE2ZCIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.MfB0JmOoi3v36DNfiNOKUUwk77HRdYR-L7KWLAaVeB5TNUOWtx-uup2cyg84FWnOuBf8S1NCSsyPVm8FoLSHLpqrtgNcUbHl2Y9kOIV_vzxndkzNc-2BU4rGnXeCLcwQu-LR6fRxVfGiIY4_6fCRhSZh8ahnZDoUkjT97BAmIRvo6MtdM5PuJbK1hDI-sfcqGzLSGrtItaGWYPLlWRl326lrco9hK-zguovlAkq_K6F-VXDMeQf6eXnw7YN6lUmPQuobaUAIKKGgYZz7pkrhEY-n8OSQaY628kKQswJU076p5ZiD6LyvlEUPqpRa-z1PIdPyElyljGE-T0bpO39WMA",
   "token_type": "Bearer",
   "expires_in": 3600
 }
doc/_includes/oauth-tokens-password.html
@@ -6,11 +6,11 @@ Example curl request:
 ```bash
 $ curl http://localhost:5000/oauth/tokens \
   -X POST \
-  -d '{"grant_type":"password","username":"russel_koelpin@flatley.co.uk","password":"s33qzwEYCM3xi4zS"}' \
+  -d '{"grant_type":"password","username":"hollis.kozey@windler.ca","password":"aCAJADuUpBUD"}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic ZjY2ZmQzNDItYzMyZi00ZjU1LWJmYTYtMmU3YTg0YmIyZmE2OnhjblBRRGZWYkFMMkVCMmdHN1lGNXpCOA==" \
+  -H "Authorization: Basic MWMyMjFmZmItMWNjNC00NmM1LTkyYjUtM2UwMmMzNWM3YTY5OldoelQ5OFBtVDJFdWk3d3E0RUNnZDNDcw==" \
   -H "Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
 ```
 Request Headers:
@@ -19,7 +19,7 @@ Request Headers:
 Accept: application/json
 Content-Type: application/json
 User-Agent: net/hippie 0.1.9
-Authorization: Basic ZjY2ZmQzNDItYzMyZi00ZjU1LWJmYTYtMmU3YTg0YmIyZmE2OnhjblBRRGZWYkFMMkVCMmdHN1lGNXpCOA==
+Authorization: Basic MWMyMjFmZmItMWNjNC00NmM1LTkyYjUtM2UwMmMzNWM3YTY5OldoelQ5OFBtVDJFdWk3d3E0RUNnZDNDcw==
 Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
 ```
 
@@ -28,8 +28,8 @@ Request Body:
 ```json
 {
   "grant_type": "password",
-  "username": "russel_koelpin@flatley.co.uk",
-  "password": "s33qzwEYCM3xi4zS"
+  "username": "hollis.kozey@windler.ca",
+  "password": "aCAJADuUpBUD"
 }
 ```
 
@@ -45,9 +45,9 @@ Referrer-Policy: strict-origin-when-cross-origin
 Cache-Control: private, no-store
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
-Etag: W/"19f301c9b19fe99943275e49e6b54e84"
-Set-Cookie: _proof=3df2480f495b9aaadc0027bb10fa669d; path=/; HttpOnly
-X-Request-Id: f9e15637-9afc-4488-a74e-58252ba21880
+Etag: W/"fc752a172f6d665616db0f8cf492b3b0"
+Set-Cookie: _proof=fa658088a6a7991bb79b6a7a1a8829e3; path=/; HttpOnly
+X-Request-Id: 5ef1419d-59f1-4014-94ff-38fbb0f02309
 Transfer-Encoding: chunked
 ```
 
@@ -55,10 +55,10 @@ Transfer-Encoding: chunked
 Response Body:
 ```json
 {
-  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzA3NjUsImlhdCI6MTU0MDc2NzE2NSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjcxNjUsImF1ZCI6ImY2NmZkMzQyLWMzMmYtNGY1NS1iZmE2LTJlN2E4NGJiMmZhNiIsImp0aSI6IjA5ZTYxNjg3LWU0NzQtNGQzYy04M2IyLTY1MmFkMDZiNjNiZCIsInN1YiI6IjBjODU4NDU5LTcyN2YtNDJhZC1hOGI5LTY3YTQ5NTk1ODljYSIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.X0oLG7DxD-BxHnTaOO_IkkoVvEu61_TxB7JwsjTx5TY-qgXnLOBnOfstH2G1BzbmdxaBIr93Je50WOpOzR89s7UaxiP3pg_EM8kXPKU34Decs84ATMD4JOPM8xVtzWF3dbyGtH61chBBPMqTK-KciHq398pkYP7w-eAbX3-xIkd87vkiJ-ng1mA7OBhUDIjG6LmnY_ercMOVhbZgejHTm5ZPHjo-uOp8DUjpKz9r9f3XQ2jZ3-MmU1-wPFkjTlXo9Dt_KX_WHv7DcQazKNlO2MtBG6oQ0-GrrLlW_Pj7CdhzLBVCLXvZz4kd09uWOnvOZnlWjjl1KZpUXLs8ACJB2A",
+  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzE5MDEsImlhdCI6MTU0MDc2ODMwMSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjgzMDEsImF1ZCI6IjFjMjIxZmZiLTFjYzQtNDZjNS05MmI1LTNlMDJjMzVjN2E2OSIsImp0aSI6IjQ0MGIzNTJmLWFlYjctNDg2Ni04ZTY2LTVjNzJhZjgwM2QzNiIsInN1YiI6Ijk0ZjViYzI4LTdkMmQtNGFjZC05YzE0LWEyZjY5MmJmNWM1NiIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.nEkYCqNFnyI1AMdJBZhYNbIWD6qCKtTKMlMHvrVW1p6Vo_Q6IQ3KvcxfK3Mq38FnnQxyFQMxl0RtzCwu37SyajczX7kb1Nchmv6hzMD1NkH9ZciVc4KWcvQdlrQkeAwvxg4ME-Fv2mrIXLgwrSraNsOZfj4WRfJm4W1RAUHgm8rM4DEOhEXHkhRgX95TJ9cwBZyE1E3oISinwX3Gy1PehHpqU24sODfpa0uYoqYUMRrrN-Qoa9Zi3Wtaq4oRLCjfVGe0_0GuVoMp8QHcOhmr6UTKMhDfJWbARWzTGdAwbabm0T9c3sst9BKUMxGrav3HIL2tRclXNSasOEDLcRKTmA",
   "token_type": "Bearer",
   "expires_in": 3600,
-  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA4NTM1NjUsImlhdCI6MTU0MDc2NzE2NSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjcxNjUsImF1ZCI6ImY2NmZkMzQyLWMzMmYtNGY1NS1iZmE2LTJlN2E4NGJiMmZhNiIsImp0aSI6IjgyYWY0YzFkLWE0YjMtNGZlOC1hMDBjLWI3OWE4YzU1NzU2NCIsInN1YiI6IjBjODU4NDU5LTcyN2YtNDJhZC1hOGI5LTY3YTQ5NTk1ODljYSIsInRva2VuX3R5cGUiOiJyZWZyZXNoIn0.S1Wlk5wqc87FPxftjbsOXBE9PMqm9xUQXrACHYkAA3uk7lNDbTOzIZPXS8rMkb2gBp_iY7OTyN7rfTJ0u_rnbidBxLQKjErs0S63Rp1JOdpaNm3whqGEqUvZ1-XrxhHWPP0nRSV92xuw9AsVMQrCaYNf1SKqdfhicQbCgBQ-Ga04rujKT9JmgruSzWls7Nhi1ILtxhpHY0Ki5OjC3vGha1xeSvaZ3p8z08zZBc92zfILYQVfT623Ay1liftihVG15rvuIHx1ZxAocEO0QoaAOGpftLQMfjuxiQXqQrj99IJ7OSuomGIJLNX6njyuU016KPJOQCEwSPHeeDRrnDGUlw"
+  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA4NTQ3MDEsImlhdCI6MTU0MDc2ODMwMSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjgzMDEsImF1ZCI6IjFjMjIxZmZiLTFjYzQtNDZjNS05MmI1LTNlMDJjMzVjN2E2OSIsImp0aSI6IjIxZTg0OTk1LTRmZWItNDUxNi04OWEyLWM0NWFmZDE5YjdkZiIsInN1YiI6Ijk0ZjViYzI4LTdkMmQtNGFjZC05YzE0LWEyZjY5MmJmNWM1NiIsInRva2VuX3R5cGUiOiJyZWZyZXNoIn0.G8as_HTS5fkCPg6G82n4OoRRn881GxLUDqc7Ac9GSses5Tb7hRKdSD6zYex3QVBp_QKc9hsz0CdMLL0iyvqCyFNYUJ4ci6MyEFh9jm3s6sdlwrjzt7i42r_lrjJ9pxqr1mBXfBTgfhI3eocfUwmMDHOwqZOJbDyq_FpuL5h9oPZPam8xCkmaqyLfO8YFY3DIRiFyUU6OBqGY_mQ4KQEprE2GvMqZ4I4Rvt_gV4CQKG2GL_YUiAEE_j4e5bsoxFRtjX2bW_AcpJR0b_Gzx1i5GgUAhJSe549GmEdUWNBWPrRZn0UPn1Wdmg6-USBdw1t47SDL_gsN3qCBKvczCMhZ-A"
 }
 ```
 
doc/_includes/oauth-tokens-pkce.html
@@ -6,11 +6,11 @@ Example curl request:
 ```bash
 $ curl http://localhost:5000/oauth/tokens \
   -X POST \
-  -d '{"grant_type":"authorization_code","code":"JAELDyhpvhFWDuyVdSs2oBot","code_verifier":"e47a08eaf8d5008bac64c98665da79cd88c93a7470a1d5651edd47cbf3afedbe4d11e41810b3cad4b24b315a10be8407d1e04ef38970dc59f78c98f5cc515a09071eeef8fa380b5f0148a1c732eab47017cf0a88009e49fcf156075942aabe2f2aa06ce3f7a8c45a4967aa78aa456b4a93b414771a5dd5230e45a0816d08f28c"}' \
+  -d '{"grant_type":"authorization_code","code":"HEXtkEEGMKeZiimz3hYyxYmE","code_verifier":"0ba67177a9f4db0840ff74484d0f63010c109b375058f7c40a1fe04a1ceab3aeced10abaec39d6cef55656d607d9f1f0181c809ff7f81e7324b55068191baf0de68f014a982d5697b9deff56d2d94aa4cffc29cb1fd55ec3b9d9f76a7a62dc1f184492f00f48b9137bd5fca4555588f9286678e775cb60333f2e0c4c457b5ca5"}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic NzFmZjJmYWUtN2RkNC00NjEyLWI1YmQtNjBiMDhhODdlNTFlOnBRcVdrMThRdkE1d3RheU0yTUFZYnBCUg==" \
+  -H "Authorization: Basic M2FjZTJlOTUtNGVkMS00YTQyLTlhOTItMDQ3ZjYzNmFiYzkxOjFHd0RSNTZtRDhlWWJzUDhzREhhN3licw==" \
   -H "Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
 ```
 Request Headers:
@@ -19,7 +19,7 @@ Request Headers:
 Accept: application/json
 Content-Type: application/json
 User-Agent: net/hippie 0.1.9
-Authorization: Basic NzFmZjJmYWUtN2RkNC00NjEyLWI1YmQtNjBiMDhhODdlNTFlOnBRcVdrMThRdkE1d3RheU0yTUFZYnBCUg==
+Authorization: Basic M2FjZTJlOTUtNGVkMS00YTQyLTlhOTItMDQ3ZjYzNmFiYzkxOjFHd0RSNTZtRDhlWWJzUDhzREhhN3licw==
 Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
 ```
 
@@ -28,8 +28,8 @@ Request Body:
 ```json
 {
   "grant_type": "authorization_code",
-  "code": "JAELDyhpvhFWDuyVdSs2oBot",
-  "code_verifier": "e47a08eaf8d5008bac64c98665da79cd88c93a7470a1d5651edd47cbf3afedbe4d11e41810b3cad4b24b315a10be8407d1e04ef38970dc59f78c98f5cc515a09071eeef8fa380b5f0148a1c732eab47017cf0a88009e49fcf156075942aabe2f2aa06ce3f7a8c45a4967aa78aa456b4a93b414771a5dd5230e45a0816d08f28c"
+  "code": "HEXtkEEGMKeZiimz3hYyxYmE",
+  "code_verifier": "0ba67177a9f4db0840ff74484d0f63010c109b375058f7c40a1fe04a1ceab3aeced10abaec39d6cef55656d607d9f1f0181c809ff7f81e7324b55068191baf0de68f014a982d5697b9deff56d2d94aa4cffc29cb1fd55ec3b9d9f76a7a62dc1f184492f00f48b9137bd5fca4555588f9286678e775cb60333f2e0c4c457b5ca5"
 }
 ```
 
@@ -45,9 +45,9 @@ Referrer-Policy: strict-origin-when-cross-origin
 Cache-Control: private, no-store
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
-Etag: W/"eb10530d47b16f93007aedfb4fbf0e9a"
-Set-Cookie: _proof=9c3aa9348467a3aff38821debf9c8444; path=/; HttpOnly
-X-Request-Id: 87073624-d8da-422e-b236-ac0ca00da14b
+Etag: W/"7fad1f5fa253eccbcae39a123d331314"
+Set-Cookie: _proof=9d40c2754b3144600736e1bb654de062; path=/; HttpOnly
+X-Request-Id: 3ee86f48-42bb-4ecd-a967-02b4c9f1685c
 Transfer-Encoding: chunked
 ```
 
@@ -55,10 +55,10 @@ Transfer-Encoding: chunked
 Response Body:
 ```json
 {
-  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzA3NjYsImlhdCI6MTU0MDc2NzE2NiwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjcxNjYsImF1ZCI6IjcxZmYyZmFlLTdkZDQtNDYxMi1iNWJkLTYwYjA4YTg3ZTUxZSIsImp0aSI6IjUxMzkwYmI5LWYzYjEtNDU0MS1iNjI5LTNlODA5ZjY4NDI3MCIsInN1YiI6IjdmNTIwMmM5LTU2YjktNDAyZS04NDlhLTY5ZTE1ZmZjNjVhYSIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.O_gWldSXOTtMtTCdr84oDdJHS8FhleQCr9J1qtBy_qKVcQqHTu8km2YtSn1K-dFhFSTWDUywq0sFOdSsuyYjj3UDOmvVIwS7T3dlfEnPcZ_n84c3tm2LvkCrT-1Cl34jDAr0rwKp-xXeEQlVFiMAaB2ZHAWWxeYT9B1pIf_5R46eysb60Z0kzdjcIBtmpA1gMWMFMvJ_xRc6hBy4UcIRC-nOGNNT_7MiJu3VvdmGYt2z62A3goGCnOBwg3ZYjRen_FeX60iOAnVGGl53ox7kWvva2N7iRzYAeo96iWSeBLYvotzOYmCkfui4GyFSEnmwfkKaOwygrXE9sC09hFBtPg",
+  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzE5MDIsImlhdCI6MTU0MDc2ODMwMiwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjgzMDIsImF1ZCI6IjNhY2UyZTk1LTRlZDEtNGE0Mi05YTkyLTA0N2Y2MzZhYmM5MSIsImp0aSI6ImFkNDBkZjAzLTNiNzItNDYwNS04NmJiLTNiNTc5MTc0YWIxMyIsInN1YiI6IjFkODJiZjQyLWMzMDctNDMzOC1hM2MwLWQ2YjVhZGI0MDM2ZCIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.TSGA5SBRqlhktMzHCm88xEVv_6gfL6QTfzTa2FqETM9b4iHoTymTudNn5xGzR-4YCJZOW8_IVx9U1Dizjc0hX3YffyQI89pdztuqHuLoW7CavEzuBQYhGKe_lpyS__tApMNtPm5_CcfC7sRYA0Jr0Sn7LKVqwKFVilIJgfxIFlKAQ4eC2dk2V9S6_G_MiUTHdQp7FUkCg5PSRLYlw9ORE3lyfLlP9_uBsZfm8gGvL70rJ3y5wNv44iKd6F6MTCIHH2dJSNXf_3R7K3GRGZCZRVr2NwYkj3uJyufPum2IFuTR8jcxX5BPcw3U_SGFPKyKzcsu47Qvr8Yl17RW7btOsQ",
   "token_type": "Bearer",
   "expires_in": 3600,
-  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA4NTM1NjYsImlhdCI6MTU0MDc2NzE2NiwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjcxNjYsImF1ZCI6IjcxZmYyZmFlLTdkZDQtNDYxMi1iNWJkLTYwYjA4YTg3ZTUxZSIsImp0aSI6ImM1NzYzY2QzLWMxYTgtNDMxZC05MGY5LTkyYjJkNTczNmRiNyIsInN1YiI6IjdmNTIwMmM5LTU2YjktNDAyZS04NDlhLTY5ZTE1ZmZjNjVhYSIsInRva2VuX3R5cGUiOiJyZWZyZXNoIn0.DkxY4S7QSopnKw385WG7ouSvLNZ1BdOohZFW7awbEJ-_um5sUSUuJlNYz928wK5d1pMjs7ktE8KiTVECuHCj0cXPAiyc-tja7ciP8NUfpHRoSu-YbYOdDvnV15dpPHazxa_JgTrlS_LL04UG50TCf74mi-TfodSL_YZktVfXGslK7VDY7B5s7jhRow3eEr3NqNUphZr1ju_Gxhj9OF1F8v4dO_2frMSeqC6ZJJ8mz0bgbyrBU8LwwFsaiYlSr0K9U6kE0_-9_fHO0RT7aKapkRIwtDS-9TyG7LC04TEbZd_6yYdme69X-IgN36Baf_ac7wBZdcgWjrEH4XCe3MzeNw"
+  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA4NTQ3MDIsImlhdCI6MTU0MDc2ODMwMiwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjgzMDIsImF1ZCI6IjNhY2UyZTk1LTRlZDEtNGE0Mi05YTkyLTA0N2Y2MzZhYmM5MSIsImp0aSI6ImYwNmI2N2Y0LTc3MjItNGE4MS1iNWFlLWRmNjlhYjliMTM5OSIsInN1YiI6IjFkODJiZjQyLWMzMDctNDMzOC1hM2MwLWQ2YjVhZGI0MDM2ZCIsInRva2VuX3R5cGUiOiJyZWZyZXNoIn0.YFxAZHtgDhwcRX2wA6JS3ykOUQyUfIFQ1ftx6M5oBRA0TI314bqm2MxJa6jm0tcK83Egb9oIuZYFYSnDyO76edoc61NkRLGNMwTJfhigtgBFQOb1MgkFNnqQ05U3DzOKLF_Z6u7wIFBPYvkjTlL6UlJ9qUROdmnDQrmDd3dx6ENTg252X2ELD70Z9HbWtpmUtEydT_U53i-xJSmW74DpYgOSGyd5XQU22nGoVgwvcCPy5UcOIvE5HINGp8Jj-KBGNFs7duFOYUezunqXon1pFjCj5WeK_SZ5lZHcKZPE0pY-K7Hoa-8FFi6ufOKdP6TuBdV-bKcJOsqpYp7XtHuCFg"
 }
 ```
 
doc/_includes/oauth-tokens-refresh-token.html
@@ -6,11 +6,11 @@ Example curl request:
 ```bash
 $ curl http://localhost:5000/oauth/tokens \
   -X POST \
-  -d '{"grant_type":"refresh_token","refresh_token":"eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzA3NjYsImlhdCI6MTU0MDc2NzE2NiwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2NzE2NiwiYXVkIjoiOGViODlkMzEtNWVkOC00ZTcxLTlmYTItOWFjZWQ4NTFjYWZmIiwianRpIjoiYmI3ZDE5NjktOTkyNi00YmU0LWE3ZjctMTBmZmJiYTljYTA1Iiwic3ViIjoiMTJkZWU5ZDQtNDc3Ny00ZTFmLWI3MTYtN2NjMjFjMTQ4MTkxIiwidG9rZW5fdHlwZSI6InJlZnJlc2gifQ.cNPI-a6gSRu4laQrjgoyDvEtRKe9x-A5cWLPMfnT0aupBeuVn3Gb0w7JvGX54UQpdHhkTMhV0CmgOOZ57solqPx1xvO5yAQzhQCiauZ9HlTP21P6esVlO-GZmASkjusBOl9wsJnFhYl2sQ4miawvOkhwpT037vaF4_h4Pv_bHDmy7FyTHDkb9cOYOQgxtV_7lLxdv-jWfKmu8zMwNegopSzXfIFdYq_9BQbNkMaFhGSQcvMp6tfMzX8fPldPYLwVgzYtmTEYwBg38IZaPwC8lcEnMMZND2sXdGX20zPa0M5ENU35djVTztN9NrgRge8cGNsYQghfdbRFnjdESiL8pQ"}' \
+  -d '{"grant_type":"refresh_token","refresh_token":"eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzE5MDEsImlhdCI6MTU0MDc2ODMwMiwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2ODMwMiwiYXVkIjoiYzhmYWY5MzgtMWQ4ZS00NjcyLWIyZWQtMDA1ZGIzYmYxYTkzIiwianRpIjoiZmJjMDdiNTctYmUwMC00YzJmLWI3MTYtOTYxMTNhNzUxZGFhIiwic3ViIjoiZmQ4NzRhMmMtOTc1Zi00NDczLTlhNjktYmJmYWFiMDk0N2ZmIiwidG9rZW5fdHlwZSI6InJlZnJlc2gifQ.gxiXz5Pm1lWH7zTf1jvCAILiOn8PUURWlkrKvewbOtG8TdSwO1S_i4NXSZePZe5etGOhhxUipb9vz8gLSp3yZzmh5hDdo9naHYmQoZQc4Vy8ae2reZ-OLCyG170butwjIvu0sTW3uQC4Do-zDGmpXk_fvd7hRvbOzup_RJa48stIcuW_l6n0ec6xQgzxlIfK5lZ6MTl9BXmyc5I-i1bAYv9m5TJPqVaxfUMdaTt_RZ290NAcx75TR-0N2lgNXDYlgbW7m6MQBxUrGp2MjHf5CPQUQjKEFXYy_OX6uMGAGBaBSr1WaPLwFaoeE3YWdURLjdiGua1Iu_GLWi8emMf0ZQ"}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic OGViODlkMzEtNWVkOC00ZTcxLTlmYTItOWFjZWQ4NTFjYWZmOm5CVFhEY1RTajJ1R2V0dG84VkxLaDRBVg==" \
+  -H "Authorization: Basic YzhmYWY5MzgtMWQ4ZS00NjcyLWIyZWQtMDA1ZGIzYmYxYTkzOlJmWjNubW5jV0RZdmFDRkxjOTdpcjhWSw==" \
   -H "Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
 ```
 Request Headers:
@@ -19,7 +19,7 @@ Request Headers:
 Accept: application/json
 Content-Type: application/json
 User-Agent: net/hippie 0.1.9
-Authorization: Basic OGViODlkMzEtNWVkOC00ZTcxLTlmYTItOWFjZWQ4NTFjYWZmOm5CVFhEY1RTajJ1R2V0dG84VkxLaDRBVg==
+Authorization: Basic YzhmYWY5MzgtMWQ4ZS00NjcyLWIyZWQtMDA1ZGIzYmYxYTkzOlJmWjNubW5jV0RZdmFDRkxjOTdpcjhWSw==
 Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
 ```
 
@@ -28,7 +28,7 @@ Request Body:
 ```json
 {
   "grant_type": "refresh_token",
-  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzA3NjYsImlhdCI6MTU0MDc2NzE2NiwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2NzE2NiwiYXVkIjoiOGViODlkMzEtNWVkOC00ZTcxLTlmYTItOWFjZWQ4NTFjYWZmIiwianRpIjoiYmI3ZDE5NjktOTkyNi00YmU0LWE3ZjctMTBmZmJiYTljYTA1Iiwic3ViIjoiMTJkZWU5ZDQtNDc3Ny00ZTFmLWI3MTYtN2NjMjFjMTQ4MTkxIiwidG9rZW5fdHlwZSI6InJlZnJlc2gifQ.cNPI-a6gSRu4laQrjgoyDvEtRKe9x-A5cWLPMfnT0aupBeuVn3Gb0w7JvGX54UQpdHhkTMhV0CmgOOZ57solqPx1xvO5yAQzhQCiauZ9HlTP21P6esVlO-GZmASkjusBOl9wsJnFhYl2sQ4miawvOkhwpT037vaF4_h4Pv_bHDmy7FyTHDkb9cOYOQgxtV_7lLxdv-jWfKmu8zMwNegopSzXfIFdYq_9BQbNkMaFhGSQcvMp6tfMzX8fPldPYLwVgzYtmTEYwBg38IZaPwC8lcEnMMZND2sXdGX20zPa0M5ENU35djVTztN9NrgRge8cGNsYQghfdbRFnjdESiL8pQ"
+  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NzE5MDEsImlhdCI6MTU0MDc2ODMwMiwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2ODMwMiwiYXVkIjoiYzhmYWY5MzgtMWQ4ZS00NjcyLWIyZWQtMDA1ZGIzYmYxYTkzIiwianRpIjoiZmJjMDdiNTctYmUwMC00YzJmLWI3MTYtOTYxMTNhNzUxZGFhIiwic3ViIjoiZmQ4NzRhMmMtOTc1Zi00NDczLTlhNjktYmJmYWFiMDk0N2ZmIiwidG9rZW5fdHlwZSI6InJlZnJlc2gifQ.gxiXz5Pm1lWH7zTf1jvCAILiOn8PUURWlkrKvewbOtG8TdSwO1S_i4NXSZePZe5etGOhhxUipb9vz8gLSp3yZzmh5hDdo9naHYmQoZQc4Vy8ae2reZ-OLCyG170butwjIvu0sTW3uQC4Do-zDGmpXk_fvd7hRvbOzup_RJa48stIcuW_l6n0ec6xQgzxlIfK5lZ6MTl9BXmyc5I-i1bAYv9m5TJPqVaxfUMdaTt_RZ290NAcx75TR-0N2lgNXDYlgbW7m6MQBxUrGp2MjHf5CPQUQjKEFXYy_OX6uMGAGBaBSr1WaPLwFaoeE3YWdURLjdiGua1Iu_GLWi8emMf0ZQ"
 }
 ```
 
@@ -44,8 +44,8 @@ Referrer-Policy: strict-origin-when-cross-origin
 Cache-Control: private, no-store
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
-Set-Cookie: _proof=aa33b998cafb348513aafa4129537877; path=/; HttpOnly
-X-Request-Id: 3d02095c-3344-4e56-bfd6-9525016b3b78
+Set-Cookie: _proof=732cb946d3430a4209a4dd670d7c4581; path=/; HttpOnly
+X-Request-Id: 3ad01af9-ffcd-439b-bffc-0baf7125e0bd
 Transfer-Encoding: chunked
 ```
 
doc/_includes/oauth-tokens-saml-assertion.html
@@ -6,11 +6,11 @@ Example curl request:
 ```bash
 $ curl http://localhost:5000/oauth/tokens \
   -X POST \
-  -d '{"grant_type":"urn:ietf:params:oauth:grant-type:saml2-bearer","assertion":"PEFzc2VydGlvbiB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgSUQ9Il80MjgwMGRkMC0wYTNhLTRlZGYtYWU3Yy01MzEzMTM4NTM3NWQiIElzc3VlSW5zdGFudD0iMjAxOC0xMC0yOFQyMjo1Mjo0NVoiIFZlcnNpb249IjIuMCI-PElzc3Vlcj5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9Jc3N1ZXI-PFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI-PFNpZ25lZEluZm8-PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxSZWZlcmVuY2UgVVJJPSIjXzQyODAwZGQwLTBhM2EtNGVkZi1hZTdjLTUzMTMxMzg1Mzc1ZCI-PFRyYW5zZm9ybXM-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvVHJhbnNmb3Jtcz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8-PERpZ2VzdFZhbHVlPkxITExtZXloLzYwbFJMT3ZFcmtEdm1PUVpJSFp2WDRRM3RzQm5iYkdpU3M9PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8-PFNpZ25hdHVyZVZhbHVlPjBVZEw0K1NrQkIvNFZoZXFhTGg3Y2UzdC9YcEpBTkNscytmUkh3S3JGVGZ2dUdrWHpsM2pUK1BSQmM0eEkrd2F4QXR4OHhpZngyOWpJR2drN1BaUXBGL0Y4bWtyZFAxMEJ4VTVtWFFXZ2VXZWxrcVIzbUlSTm9HSzJWcm5oYjJCWHYwc3FqNit0MW5MZVk3dnVleVRCUmVRRkNNYTVONjNxam5sdUJhaG1FZTMwSHlLYnJBN2xFcng1NVZRd2RDRU5kQmVGKzJHL2p4OVVtV0UzTVRWWDUyS05aSDlkeUw4bmdmSHBucTJveXJRcWVqL25oU0J4OFZBUFloRU55cjg4UE5xTFNGNkNoVUJyWDZTWnExMVoxcGNIME9UZXg4NWxscFhyL3JJOXU5dFZtQWRFT0cyZnRYOFI5T2RpWThPMFBDcnJ1ZzF2dWE3cmJHV2ova3AyQT09PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbz48WDUwOURhdGE-PFg1MDlDZXJ0aWZpY2F0ZT5NSUlETnpDQ0FoK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQURCZk1Rc3dDUVlEVlFRR0V3SkRRVEVMTUFrR0ExVUVDQXdDUVVJeEVEQU9CZ05WQkFjTUIwTmhiR2RoY25reER6QU5CZ05WQkFvTUJsaHRiRXRwZERFUE1BMEdBMVVFQ3d3R1dHMXNTMmwwTVE4d0RRWURWUVFEREFaWWJXeExhWFF3SGhjTk1UZ3hNREk0TWpJMU1qUXpXaGNOTVRneE1USTNNakkxTWpReldqQmZNUXN3Q1FZRFZRUUdFd0pEUVRFTE1Ba0dBMVVFQ0F3Q1FVSXhFREFPQmdOVkJBY01CME5oYkdkaGNua3hEekFOQmdOVkJBb01CbGh0YkV0cGRERVBNQTBHQTFVRUN3d0dXRzFzUzJsME1ROHdEUVlEVlFRRERBWlliV3hMYVhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURhV2poTi9uMFNlMFUyQWd0WjVEei9pMTJ0L1FrNXBBMUlrTXNQZVdjTEVMVFlBVlVUWGpNWEpCVWlwU3pveU92dDVHS1BYV1FqdUhaUjI1T3FxMW1hcHBONCtxR3IyTWZJQnJkQ3E5ZDJSajB0TFFLb25GMFpZbGowMDMydlJRcVJGWWFQNyswRks0UXlhRkFkTkZMSUNicW9LaVhwbzBVdnlqcmdKTjJ6d3VWYkdtcTk1Vi9EcXNPM09NQVhQLzlXa1FJR3VHQ0JkZTEwSlRkYzFmVHJJZStqV1JUVDM2THI3czFxd0Y0VUFEZUNPRENRWkl1VVZFc3puVDVwVGxZTGFwQXAwTEtiMlVpQ2tHUk1NUytLNHhRbTQ0VWxTRDVCZlFYQVo0UDZkV05Eb2xqSGMxRGtMbElBMFFJMTdtNjNuNVlIN252RjB4UjhZOWdienAvTkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUhZdjFsdXdxVkI1R2MrTnpjaUhvVVdDRkZ5dWdCejNuMC93REJzNmV4bFRkT0xrTjVvRmF1TllkZ0FVK0xKVzVldUkyMmxVcDlwNjVWelFySzl3REh4bHJRb3ZBQlBHN0o0MkZHTmUwbWNZWmJ2MGhZYXpJSFl4MXZIVWEwSEtOajhiZFMyYkJ0SUVrbHcwOFppMWVEYzJ6OEhUdlB6b2psWHdKUTNhbHlmRnl6bWQ2TzBkZnR5dS9FUGsycDc0TTU0NnUyY3gzS2U0WS9wckdIMnlBNFRmR21OcmhwMW1IMS9WUS9oTUgxQVJkR1JPeGdOZ1ZOZFV6MXlrYU52V2QySGJnQ0JqY1IweTUxMnFqczZpcEllZ2xiL2hDL0Z3LzNoMXF4aklnUEx6aTA5NHRMVVZnVmZOcW1UOXVVR25VQ2Y3RmlzeDhOb255aGk5OHdvNEErVT08L1g1MDlDZXJ0aWZpY2F0ZT48L1g1MDlEYXRhPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48U3ViamVjdD48TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPnRhbWVyYS53eW1hbkBmcmllc2VuLm5hbWU8L05hbWVJRD48U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSBJblJlc3BvbnNlVG89Il8zNDU4M2Y0Yi01ODdlLTQxOTYtOGI5ZS1jNmJlYmY2YzhlNGIiIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOFQyMjo1Nzo0NVoiLz48L1N1YmplY3RDb25maXJtYXRpb24-PC9TdWJqZWN0PjxDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAxOC0xMC0yOFQyMjo1Mjo0NVoiIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOVQwMTo1Mjo0NVoiPjxBdWRpZW5jZVJlc3RyaWN0aW9uPjxBdWRpZW5jZT5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9BdWRpZW5jZT48L0F1ZGllbmNlUmVzdHJpY3Rpb24-PC9Db25kaXRpb25zPjxBdXRoblN0YXRlbWVudCBBdXRobkluc3RhbnQ9IjIwMTgtMTAtMjhUMjI6NTI6NDVaIiBTZXNzaW9uSW5kZXg9Il80MjgwMGRkMC0wYTNhLTRlZGYtYWU3Yy01MzEzMTM4NTM3NWQiPjxBdXRobkNvbnRleHQ-PEF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkPC9BdXRobkNvbnRleHRDbGFzc1JlZj48L0F1dGhuQ29udGV4dD48L0F1dGhuU3RhdGVtZW50PjxBdHRyaWJ1dGVTdGF0ZW1lbnQ-PEF0dHJpYnV0ZSBOYW1lPSJpZCI-PEF0dHJpYnV0ZVZhbHVlPjRiZDk2MDNkLWQyMTctNGI5OS05MWQ0LTI3NTFiMjlhNTZkNTwvQXR0cmlidXRlVmFsdWU-PC9BdHRyaWJ1dGU-PEF0dHJpYnV0ZSBOYW1lPSJlbWFpbCI-PEF0dHJpYnV0ZVZhbHVlPnRhbWVyYS53eW1hbkBmcmllc2VuLm5hbWU8L0F0dHJpYnV0ZVZhbHVlPjwvQXR0cmlidXRlPjxBdHRyaWJ1dGUgTmFtZT0iY3JlYXRlZF9hdCI-PEF0dHJpYnV0ZVZhbHVlPjIwMTgtMTAtMjggMjI6NTI6NDUgVVRDPC9BdHRyaWJ1dGVWYWx1ZT48L0F0dHJpYnV0ZT48L0F0dHJpYnV0ZVN0YXRlbWVudD48L0Fzc2VydGlvbj4K"}' \
+  -d '{"grant_type":"urn:ietf:params:oauth:grant-type:saml2-bearer","assertion":"PEFzc2VydGlvbiB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgSUQ9Il83OGJiOTA0Yi01ZTNiLTQ1ZmUtYTAwMi01MzIyZjhhZmQwYTgiIElzc3VlSW5zdGFudD0iMjAxOC0xMC0yOFQyMzoxMTo0MVoiIFZlcnNpb249IjIuMCI-PElzc3Vlcj5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9Jc3N1ZXI-PFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI-PFNpZ25lZEluZm8-PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxSZWZlcmVuY2UgVVJJPSIjXzc4YmI5MDRiLTVlM2ItNDVmZS1hMDAyLTUzMjJmOGFmZDBhOCI-PFRyYW5zZm9ybXM-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvVHJhbnNmb3Jtcz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8-PERpZ2VzdFZhbHVlPlBiRTRieVdzRzlpVjRTZi9UdG5LKzYrTkFCTmpGaUprSUFlamN2dUo5NXc9PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8-PFNpZ25hdHVyZVZhbHVlPmdsbFNiRllKdlpBeTdtbHBCMzJrRENzMFNtS0FreDF1cXdqM1NrSFI5MWpOSWdteTUzQkNyUFp6Z3BoQzQwQnFpdzZMbTF2eHBNa2ZEZ2F6QXBkTWpLM09mbkUya3VEQ1JtRDJQL3ZFK3hVOElaZlplZ1U5VnB2Y0h2MllHRkZyWnlId21FSU1TclVkNFYwNEJuOENkQjdtVjdhc3ZkKzZRRUFYNUIrY1RrOG9keHlBM3l1M0cycm9LRmsrL0NLenh0dVJVY3k3WjRUV3RhUUtUNncvclZBU1BsaHRrUkpxUnVkS1A1RFBqVEhxQ3FadFdlSGkrbVZueWpLWHhGN2hYOW1BblgyaTdpZlpjMXcxSEpWaVNPTE56R1ZPcGMvekdnUWJibGdiZDNzM2ZHSGxmeENYWm5jcTdGMFlPZ1dYQUxRL3M0TXRzRnBLWVMxV09LNFR1dz09PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbz48WDUwOURhdGE-PFg1MDlDZXJ0aWZpY2F0ZT5NSUlETnpDQ0FoK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQURCZk1Rc3dDUVlEVlFRR0V3SkRRVEVMTUFrR0ExVUVDQXdDUVVJeEVEQU9CZ05WQkFjTUIwTmhiR2RoY25reER6QU5CZ05WQkFvTUJsaHRiRXRwZERFUE1BMEdBMVVFQ3d3R1dHMXNTMmwwTVE4d0RRWURWUVFEREFaWWJXeExhWFF3SGhjTk1UZ3hNREk0TWpNeE1UTTRXaGNOTVRneE1USTNNak14TVRNNFdqQmZNUXN3Q1FZRFZRUUdFd0pEUVRFTE1Ba0dBMVVFQ0F3Q1FVSXhFREFPQmdOVkJBY01CME5oYkdkaGNua3hEekFOQmdOVkJBb01CbGh0YkV0cGRERVBNQTBHQTFVRUN3d0dXRzFzUzJsME1ROHdEUVlEVlFRRERBWlliV3hMYVhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUR3L25jQlZ5N2xaSEgrT1d5c09QdXVEem5HK011VURraTZlbUhobGpuOVhnZkZMZVk2Mld6dC9uVThoWVdaQm1DQnduWkphZ0tpODFNT1RrZmZrcWFwTXRiYlJmRHVkN01DL1NsdHFZYW5QQnM3SWVNV29Ud08vUENlZSsvYkVsTjhETm9OblozT2FlREZacEpJRzdxSi9FZ2RuRHlsSyt0SHNiVm1BUkZadnRETDN0QVYzaUxRdzVVUnFVRGdvTEYwNDNTODJldnhHOWlIeTlWaGt4SHVSclh0Vk1sckgxS2d0Z1o2NmhrZEl3TDdxYVdUMklsUjlhZUIxU2ttZlNlRXNGcTVad09ycDJ5empUTTZmY0p6eUd0c2tlUk1IUkJuNjJXN294YTJhSUtxejczSEJXdEF1RUJPMjBCRG1pTmdmNjdzNmFHZ2kxZU93TFRleFhSTkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUNTL081TDR4NkpvMXFYV2JpMVk4R2l4Z252MUdPRkZBMzNxMkZOYlNUL3V2UzdObitZQUcrNm92SFBCRTNWQzZwclRLZW1NWS90WFVHZ3RhdmR4SDlDUjFYWjUzb2lMb0svcW50RTYvd2ZlMWV2QjNvV1AzWU9mcU5hY1RoU1hIYVpuZkRhOHl0T1AydWtUREduVVZtVmpLSU0zcE14bHBaeHRRTWkvRVF2NU1NQk1NN3RuNHI3MklPaVYxOGdSTENCQ1h4YzY3T1JkaWhCSUJJbHRzbi85cWNOVmFpdEhqbnFIRHF2NGV0ck92aXdSNkR5WktBeGs0b1VlZWo2OGtZczMxZUpUeWovYUVoNzQ2ekNXRWVqSTU3YlJ2ZVV1ZUNLOExxeHdkeXdUS0RoRHNwRjN0UlhPYXN5WUdzQ1dQT2dhV3psVUtKa1JjT0JiZk9pbGI2dz08L1g1MDlDZXJ0aWZpY2F0ZT48L1g1MDlEYXRhPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48U3ViamVjdD48TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPnBoZWJlQGhlcnpvZ2RlY2tvdy5jb208L05hbWVJRD48U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSBJblJlc3BvbnNlVG89Il9kMmQ0YzE5NC1lYTEyLTRiMTEtYTEzZS1lMDhkZTBhM2MwNGUiIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOFQyMzoxNjo0MVoiLz48L1N1YmplY3RDb25maXJtYXRpb24-PC9TdWJqZWN0PjxDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAxOC0xMC0yOFQyMzoxMTo0MVoiIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOVQwMjoxMTo0MVoiPjxBdWRpZW5jZVJlc3RyaWN0aW9uPjxBdWRpZW5jZT5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9BdWRpZW5jZT48L0F1ZGllbmNlUmVzdHJpY3Rpb24-PC9Db25kaXRpb25zPjxBdXRoblN0YXRlbWVudCBBdXRobkluc3RhbnQ9IjIwMTgtMTAtMjhUMjM6MTE6NDFaIiBTZXNzaW9uSW5kZXg9Il83OGJiOTA0Yi01ZTNiLTQ1ZmUtYTAwMi01MzIyZjhhZmQwYTgiPjxBdXRobkNvbnRleHQ-PEF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkPC9BdXRobkNvbnRleHRDbGFzc1JlZj48L0F1dGhuQ29udGV4dD48L0F1dGhuU3RhdGVtZW50PjxBdHRyaWJ1dGVTdGF0ZW1lbnQ-PEF0dHJpYnV0ZSBOYW1lPSJpZCI-PEF0dHJpYnV0ZVZhbHVlPjJmODAzMDc2LTNhOWItNDcxMS04NmNmLWI5YzBhNTQ2MmFmZjwvQXR0cmlidXRlVmFsdWU-PC9BdHRyaWJ1dGU-PEF0dHJpYnV0ZSBOYW1lPSJlbWFpbCI-PEF0dHJpYnV0ZVZhbHVlPnBoZWJlQGhlcnpvZ2RlY2tvdy5jb208L0F0dHJpYnV0ZVZhbHVlPjwvQXR0cmlidXRlPjxBdHRyaWJ1dGUgTmFtZT0iY3JlYXRlZF9hdCI-PEF0dHJpYnV0ZVZhbHVlPjIwMTgtMTAtMjggMjM6MTE6NDEgVVRDPC9BdHRyaWJ1dGVWYWx1ZT48L0F0dHJpYnV0ZT48L0F0dHJpYnV0ZVN0YXRlbWVudD48L0Fzc2VydGlvbj4K"}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic NzViZWExYjMtYzI2OC00MTI2LThjOWYtZTc2NDVlYmExYjdhOmtHMmFxM21ZWU5xM0wzU3JYb0s5N3RaNw==" \
+  -H "Authorization: Basic MzQ4ZDBjYjgtMTJiMS00Y2M0LTg4M2MtYmQ1YWZjZGJmYTUxOjhDZTg3ZXBWS1hQTlV3ZGRlVlpuTWt1ag==" \
   -H "Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
 ```
 Request Headers:
@@ -19,7 +19,7 @@ Request Headers:
 Accept: application/json
 Content-Type: application/json
 User-Agent: net/hippie 0.1.9
-Authorization: Basic NzViZWExYjMtYzI2OC00MTI2LThjOWYtZTc2NDVlYmExYjdhOmtHMmFxM21ZWU5xM0wzU3JYb0s5N3RaNw==
+Authorization: Basic MzQ4ZDBjYjgtMTJiMS00Y2M0LTg4M2MtYmQ1YWZjZGJmYTUxOjhDZTg3ZXBWS1hQTlV3ZGRlVlpuTWt1ag==
 Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
 ```
 
@@ -28,7 +28,7 @@ Request Body:
 ```json
 {
   "grant_type": "urn:ietf:params:oauth:grant-type:saml2-bearer",
-  "assertion": "PEFzc2VydGlvbiB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgSUQ9Il80MjgwMGRkMC0wYTNhLTRlZGYtYWU3Yy01MzEzMTM4NTM3NWQiIElzc3VlSW5zdGFudD0iMjAxOC0xMC0yOFQyMjo1Mjo0NVoiIFZlcnNpb249IjIuMCI-PElzc3Vlcj5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9Jc3N1ZXI-PFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI-PFNpZ25lZEluZm8-PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxSZWZlcmVuY2UgVVJJPSIjXzQyODAwZGQwLTBhM2EtNGVkZi1hZTdjLTUzMTMxMzg1Mzc1ZCI-PFRyYW5zZm9ybXM-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvVHJhbnNmb3Jtcz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8-PERpZ2VzdFZhbHVlPkxITExtZXloLzYwbFJMT3ZFcmtEdm1PUVpJSFp2WDRRM3RzQm5iYkdpU3M9PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8-PFNpZ25hdHVyZVZhbHVlPjBVZEw0K1NrQkIvNFZoZXFhTGg3Y2UzdC9YcEpBTkNscytmUkh3S3JGVGZ2dUdrWHpsM2pUK1BSQmM0eEkrd2F4QXR4OHhpZngyOWpJR2drN1BaUXBGL0Y4bWtyZFAxMEJ4VTVtWFFXZ2VXZWxrcVIzbUlSTm9HSzJWcm5oYjJCWHYwc3FqNit0MW5MZVk3dnVleVRCUmVRRkNNYTVONjNxam5sdUJhaG1FZTMwSHlLYnJBN2xFcng1NVZRd2RDRU5kQmVGKzJHL2p4OVVtV0UzTVRWWDUyS05aSDlkeUw4bmdmSHBucTJveXJRcWVqL25oU0J4OFZBUFloRU55cjg4UE5xTFNGNkNoVUJyWDZTWnExMVoxcGNIME9UZXg4NWxscFhyL3JJOXU5dFZtQWRFT0cyZnRYOFI5T2RpWThPMFBDcnJ1ZzF2dWE3cmJHV2ova3AyQT09PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbz48WDUwOURhdGE-PFg1MDlDZXJ0aWZpY2F0ZT5NSUlETnpDQ0FoK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQURCZk1Rc3dDUVlEVlFRR0V3SkRRVEVMTUFrR0ExVUVDQXdDUVVJeEVEQU9CZ05WQkFjTUIwTmhiR2RoY25reER6QU5CZ05WQkFvTUJsaHRiRXRwZERFUE1BMEdBMVVFQ3d3R1dHMXNTMmwwTVE4d0RRWURWUVFEREFaWWJXeExhWFF3SGhjTk1UZ3hNREk0TWpJMU1qUXpXaGNOTVRneE1USTNNakkxTWpReldqQmZNUXN3Q1FZRFZRUUdFd0pEUVRFTE1Ba0dBMVVFQ0F3Q1FVSXhFREFPQmdOVkJBY01CME5oYkdkaGNua3hEekFOQmdOVkJBb01CbGh0YkV0cGRERVBNQTBHQTFVRUN3d0dXRzFzUzJsME1ROHdEUVlEVlFRRERBWlliV3hMYVhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURhV2poTi9uMFNlMFUyQWd0WjVEei9pMTJ0L1FrNXBBMUlrTXNQZVdjTEVMVFlBVlVUWGpNWEpCVWlwU3pveU92dDVHS1BYV1FqdUhaUjI1T3FxMW1hcHBONCtxR3IyTWZJQnJkQ3E5ZDJSajB0TFFLb25GMFpZbGowMDMydlJRcVJGWWFQNyswRks0UXlhRkFkTkZMSUNicW9LaVhwbzBVdnlqcmdKTjJ6d3VWYkdtcTk1Vi9EcXNPM09NQVhQLzlXa1FJR3VHQ0JkZTEwSlRkYzFmVHJJZStqV1JUVDM2THI3czFxd0Y0VUFEZUNPRENRWkl1VVZFc3puVDVwVGxZTGFwQXAwTEtiMlVpQ2tHUk1NUytLNHhRbTQ0VWxTRDVCZlFYQVo0UDZkV05Eb2xqSGMxRGtMbElBMFFJMTdtNjNuNVlIN252RjB4UjhZOWdienAvTkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUhZdjFsdXdxVkI1R2MrTnpjaUhvVVdDRkZ5dWdCejNuMC93REJzNmV4bFRkT0xrTjVvRmF1TllkZ0FVK0xKVzVldUkyMmxVcDlwNjVWelFySzl3REh4bHJRb3ZBQlBHN0o0MkZHTmUwbWNZWmJ2MGhZYXpJSFl4MXZIVWEwSEtOajhiZFMyYkJ0SUVrbHcwOFppMWVEYzJ6OEhUdlB6b2psWHdKUTNhbHlmRnl6bWQ2TzBkZnR5dS9FUGsycDc0TTU0NnUyY3gzS2U0WS9wckdIMnlBNFRmR21OcmhwMW1IMS9WUS9oTUgxQVJkR1JPeGdOZ1ZOZFV6MXlrYU52V2QySGJnQ0JqY1IweTUxMnFqczZpcEllZ2xiL2hDL0Z3LzNoMXF4aklnUEx6aTA5NHRMVVZnVmZOcW1UOXVVR25VQ2Y3RmlzeDhOb255aGk5OHdvNEErVT08L1g1MDlDZXJ0aWZpY2F0ZT48L1g1MDlEYXRhPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48U3ViamVjdD48TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPnRhbWVyYS53eW1hbkBmcmllc2VuLm5hbWU8L05hbWVJRD48U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSBJblJlc3BvbnNlVG89Il8zNDU4M2Y0Yi01ODdlLTQxOTYtOGI5ZS1jNmJlYmY2YzhlNGIiIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOFQyMjo1Nzo0NVoiLz48L1N1YmplY3RDb25maXJtYXRpb24-PC9TdWJqZWN0PjxDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAxOC0xMC0yOFQyMjo1Mjo0NVoiIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOVQwMTo1Mjo0NVoiPjxBdWRpZW5jZVJlc3RyaWN0aW9uPjxBdWRpZW5jZT5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9BdWRpZW5jZT48L0F1ZGllbmNlUmVzdHJpY3Rpb24-PC9Db25kaXRpb25zPjxBdXRoblN0YXRlbWVudCBBdXRobkluc3RhbnQ9IjIwMTgtMTAtMjhUMjI6NTI6NDVaIiBTZXNzaW9uSW5kZXg9Il80MjgwMGRkMC0wYTNhLTRlZGYtYWU3Yy01MzEzMTM4NTM3NWQiPjxBdXRobkNvbnRleHQ-PEF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkPC9BdXRobkNvbnRleHRDbGFzc1JlZj48L0F1dGhuQ29udGV4dD48L0F1dGhuU3RhdGVtZW50PjxBdHRyaWJ1dGVTdGF0ZW1lbnQ-PEF0dHJpYnV0ZSBOYW1lPSJpZCI-PEF0dHJpYnV0ZVZhbHVlPjRiZDk2MDNkLWQyMTctNGI5OS05MWQ0LTI3NTFiMjlhNTZkNTwvQXR0cmlidXRlVmFsdWU-PC9BdHRyaWJ1dGU-PEF0dHJpYnV0ZSBOYW1lPSJlbWFpbCI-PEF0dHJpYnV0ZVZhbHVlPnRhbWVyYS53eW1hbkBmcmllc2VuLm5hbWU8L0F0dHJpYnV0ZVZhbHVlPjwvQXR0cmlidXRlPjxBdHRyaWJ1dGUgTmFtZT0iY3JlYXRlZF9hdCI-PEF0dHJpYnV0ZVZhbHVlPjIwMTgtMTAtMjggMjI6NTI6NDUgVVRDPC9BdHRyaWJ1dGVWYWx1ZT48L0F0dHJpYnV0ZT48L0F0dHJpYnV0ZVN0YXRlbWVudD48L0Fzc2VydGlvbj4K"
+  "assertion": "PEFzc2VydGlvbiB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgSUQ9Il83OGJiOTA0Yi01ZTNiLTQ1ZmUtYTAwMi01MzIyZjhhZmQwYTgiIElzc3VlSW5zdGFudD0iMjAxOC0xMC0yOFQyMzoxMTo0MVoiIFZlcnNpb249IjIuMCI-PElzc3Vlcj5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9Jc3N1ZXI-PFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI-PFNpZ25lZEluZm8-PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxSZWZlcmVuY2UgVVJJPSIjXzc4YmI5MDRiLTVlM2ItNDVmZS1hMDAyLTUzMjJmOGFmZDBhOCI-PFRyYW5zZm9ybXM-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvVHJhbnNmb3Jtcz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8-PERpZ2VzdFZhbHVlPlBiRTRieVdzRzlpVjRTZi9UdG5LKzYrTkFCTmpGaUprSUFlamN2dUo5NXc9PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8-PFNpZ25hdHVyZVZhbHVlPmdsbFNiRllKdlpBeTdtbHBCMzJrRENzMFNtS0FreDF1cXdqM1NrSFI5MWpOSWdteTUzQkNyUFp6Z3BoQzQwQnFpdzZMbTF2eHBNa2ZEZ2F6QXBkTWpLM09mbkUya3VEQ1JtRDJQL3ZFK3hVOElaZlplZ1U5VnB2Y0h2MllHRkZyWnlId21FSU1TclVkNFYwNEJuOENkQjdtVjdhc3ZkKzZRRUFYNUIrY1RrOG9keHlBM3l1M0cycm9LRmsrL0NLenh0dVJVY3k3WjRUV3RhUUtUNncvclZBU1BsaHRrUkpxUnVkS1A1RFBqVEhxQ3FadFdlSGkrbVZueWpLWHhGN2hYOW1BblgyaTdpZlpjMXcxSEpWaVNPTE56R1ZPcGMvekdnUWJibGdiZDNzM2ZHSGxmeENYWm5jcTdGMFlPZ1dYQUxRL3M0TXRzRnBLWVMxV09LNFR1dz09PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbz48WDUwOURhdGE-PFg1MDlDZXJ0aWZpY2F0ZT5NSUlETnpDQ0FoK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQURCZk1Rc3dDUVlEVlFRR0V3SkRRVEVMTUFrR0ExVUVDQXdDUVVJeEVEQU9CZ05WQkFjTUIwTmhiR2RoY25reER6QU5CZ05WQkFvTUJsaHRiRXRwZERFUE1BMEdBMVVFQ3d3R1dHMXNTMmwwTVE4d0RRWURWUVFEREFaWWJXeExhWFF3SGhjTk1UZ3hNREk0TWpNeE1UTTRXaGNOTVRneE1USTNNak14TVRNNFdqQmZNUXN3Q1FZRFZRUUdFd0pEUVRFTE1Ba0dBMVVFQ0F3Q1FVSXhFREFPQmdOVkJBY01CME5oYkdkaGNua3hEekFOQmdOVkJBb01CbGh0YkV0cGRERVBNQTBHQTFVRUN3d0dXRzFzUzJsME1ROHdEUVlEVlFRRERBWlliV3hMYVhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUR3L25jQlZ5N2xaSEgrT1d5c09QdXVEem5HK011VURraTZlbUhobGpuOVhnZkZMZVk2Mld6dC9uVThoWVdaQm1DQnduWkphZ0tpODFNT1RrZmZrcWFwTXRiYlJmRHVkN01DL1NsdHFZYW5QQnM3SWVNV29Ud08vUENlZSsvYkVsTjhETm9OblozT2FlREZacEpJRzdxSi9FZ2RuRHlsSyt0SHNiVm1BUkZadnRETDN0QVYzaUxRdzVVUnFVRGdvTEYwNDNTODJldnhHOWlIeTlWaGt4SHVSclh0Vk1sckgxS2d0Z1o2NmhrZEl3TDdxYVdUMklsUjlhZUIxU2ttZlNlRXNGcTVad09ycDJ5empUTTZmY0p6eUd0c2tlUk1IUkJuNjJXN294YTJhSUtxejczSEJXdEF1RUJPMjBCRG1pTmdmNjdzNmFHZ2kxZU93TFRleFhSTkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUNTL081TDR4NkpvMXFYV2JpMVk4R2l4Z252MUdPRkZBMzNxMkZOYlNUL3V2UzdObitZQUcrNm92SFBCRTNWQzZwclRLZW1NWS90WFVHZ3RhdmR4SDlDUjFYWjUzb2lMb0svcW50RTYvd2ZlMWV2QjNvV1AzWU9mcU5hY1RoU1hIYVpuZkRhOHl0T1AydWtUREduVVZtVmpLSU0zcE14bHBaeHRRTWkvRVF2NU1NQk1NN3RuNHI3MklPaVYxOGdSTENCQ1h4YzY3T1JkaWhCSUJJbHRzbi85cWNOVmFpdEhqbnFIRHF2NGV0ck92aXdSNkR5WktBeGs0b1VlZWo2OGtZczMxZUpUeWovYUVoNzQ2ekNXRWVqSTU3YlJ2ZVV1ZUNLOExxeHdkeXdUS0RoRHNwRjN0UlhPYXN5WUdzQ1dQT2dhV3psVUtKa1JjT0JiZk9pbGI2dz08L1g1MDlDZXJ0aWZpY2F0ZT48L1g1MDlEYXRhPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48U3ViamVjdD48TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPnBoZWJlQGhlcnpvZ2RlY2tvdy5jb208L05hbWVJRD48U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSBJblJlc3BvbnNlVG89Il9kMmQ0YzE5NC1lYTEyLTRiMTEtYTEzZS1lMDhkZTBhM2MwNGUiIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOFQyMzoxNjo0MVoiLz48L1N1YmplY3RDb25maXJtYXRpb24-PC9TdWJqZWN0PjxDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAxOC0xMC0yOFQyMzoxMTo0MVoiIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOVQwMjoxMTo0MVoiPjxBdWRpZW5jZVJlc3RyaWN0aW9uPjxBdWRpZW5jZT5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9BdWRpZW5jZT48L0F1ZGllbmNlUmVzdHJpY3Rpb24-PC9Db25kaXRpb25zPjxBdXRoblN0YXRlbWVudCBBdXRobkluc3RhbnQ9IjIwMTgtMTAtMjhUMjM6MTE6NDFaIiBTZXNzaW9uSW5kZXg9Il83OGJiOTA0Yi01ZTNiLTQ1ZmUtYTAwMi01MzIyZjhhZmQwYTgiPjxBdXRobkNvbnRleHQ-PEF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkPC9BdXRobkNvbnRleHRDbGFzc1JlZj48L0F1dGhuQ29udGV4dD48L0F1dGhuU3RhdGVtZW50PjxBdHRyaWJ1dGVTdGF0ZW1lbnQ-PEF0dHJpYnV0ZSBOYW1lPSJpZCI-PEF0dHJpYnV0ZVZhbHVlPjJmODAzMDc2LTNhOWItNDcxMS04NmNmLWI5YzBhNTQ2MmFmZjwvQXR0cmlidXRlVmFsdWU-PC9BdHRyaWJ1dGU-PEF0dHJpYnV0ZSBOYW1lPSJlbWFpbCI-PEF0dHJpYnV0ZVZhbHVlPnBoZWJlQGhlcnpvZ2RlY2tvdy5jb208L0F0dHJpYnV0ZVZhbHVlPjwvQXR0cmlidXRlPjxBdHRyaWJ1dGUgTmFtZT0iY3JlYXRlZF9hdCI-PEF0dHJpYnV0ZVZhbHVlPjIwMTgtMTAtMjggMjM6MTE6NDEgVVRDPC9BdHRyaWJ1dGVWYWx1ZT48L0F0dHJpYnV0ZT48L0F0dHJpYnV0ZVN0YXRlbWVudD48L0Fzc2VydGlvbj4K"
 }
 ```
 
@@ -44,8 +44,8 @@ Referrer-Policy: strict-origin-when-cross-origin
 Cache-Control: private, no-store
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
-Set-Cookie: _proof=3555b79940466c50133743fd748f1c49; path=/; HttpOnly
-X-Request-Id: 6fa3ef4b-bbe4-40f3-85c5-646be236d31a
+Set-Cookie: _proof=390dcb577667a90ea5a2933886c8ba49; path=/; HttpOnly
+X-Request-Id: c78b67f0-e316-441a-91a7-c2841350083f
 Transfer-Encoding: chunked
 ```
 
doc/_includes/scim-service-provider-config.html
@@ -0,0 +1,90 @@
+
+#### GET http://localhost:5000/scim/v2/ServiceProviderConfig
+
+Example curl request:
+
+```bash
+$ curl http://localhost:5000/scim/v2/ServiceProviderConfig \
+  -X GET \
+  -d '' \
+  -H "Accept: application/json" \
+  -H "Content-Type: application/json" \
+  -H "User-Agent: net/hippie 0.1.9" \
+  -H "Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
+```
+Request Headers:
+
+```text
+Accept: application/json
+Content-Type: application/json
+User-Agent: net/hippie 0.1.9
+Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+```
+
+
+Response Headers:
+
+```text
+X-Frame-Options: SAMEORIGIN
+X-Xss-Protection: 1; mode=block
+X-Content-Type-Options: nosniff
+X-Download-Options: noopen
+X-Permitted-Cross-Domain-Policies: none
+Referrer-Policy: strict-origin-when-cross-origin
+Content-Type: application/scim+json
+Etag: W/"28bdb10ddd3524e25b3e3bd44a5b8169"
+Cache-Control: max-age=0, private, must-revalidate
+X-Request-Id: e6ab9b01-0f92-48a6-9fa0-c304edbf8311
+Transfer-Encoding: chunked
+```
+
+
+Response Body:
+```json
+{
+  "schemas": [
+    "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"
+  ],
+  "documentationUri": "http://localhost:5000/doc",
+  "patch": {
+    "supported": false
+  },
+  "bulk": {
+    "supported": false,
+    "maxOperations": null,
+    "maxPayloadSize": null
+  },
+  "filter": {
+    "supported": false,
+    "maxResults": null
+  },
+  "changePassword": {
+    "supported": false
+  },
+  "sort": {
+    "supported": false
+  },
+  "etag": {
+    "supported": false
+  },
+  "authenticationSchemes": [
+    {
+      "name": "OAuth Bearer Token",
+      "description": "Authentication scheme using the OAuth Bearer Token Standard",
+      "specUri": "http://www.rfc-editor.org/info/rfc6750",
+      "documentationUri": "http://example.com/help/oauth.html",
+      "type": "oauthbearertoken",
+      "primary": true
+    }
+  ],
+  "meta": {
+    "resourceType": "ServiceProviderConfig",
+    "created": "2018-10-28T23:11:42Z",
+    "lastModified": "2018-10-28T23:11:42Z",
+    "location": "http://localhost:5000/scim/v2/ServiceProviderConfig",
+    "version": 1
+  }
+}
+```
+
+
doc/_posts/2018-10-28-scim-service-provider-config.markdown
@@ -0,0 +1,11 @@
+---
+layout: post
+title:  "SCIM - Service Provider Config"
+date:   2018-10-28 17:00:00 -0600
+permalink: /scime/service-provider-config.html
+categories: oauth
+---
+
+This endpoint adheres to [RFC-7644](https://tools.ietf.org/html/rfc7644#section-4).
+
+{% include scim-service-provider-config.html %}
spec/requests/scim/v2/service_provider_config_spec.rb
@@ -21,7 +21,7 @@ describe "/ServiceProviderConfig" do
     specify { expect(response).to have_http_status(:ok) }
     specify { expect(response.body).to be_present }
     specify { expect(json[:schemas]).to match_array([Scim::Shady::Schemas::SERVICE_PROVIDER_CONFIG]) }
-    specify { expect(json[:documentationUri]).to be_blank }
+    specify { expect(json[:documentationUri]).to eql(root_url + "doc") }
     specify { expect(json[:patch][:supported]).to be(false) }
     specify { expect(json[:bulk][:supported]).to be(false) }
     specify { expect(json[:filter][:supported]).to be(false) }
spec/documentation.rb
@@ -124,4 +124,11 @@ RSpec.describe "documentation" do
       expect(response.code).to eql('200')
     end
   end
+
+  specify do
+    VCR.use_cassette("scim-service-provider-config") do
+      response = hippie.get("#{scheme}://#{host}/scim/v2/ServiceProviderConfig")
+      expect(response.code).to eql('200')
+    end
+  end
 end