Commit 299bd2e

mo <mo@mokhan.ca>
2018-10-28 21:56:41
document dynamic client registration
1 parent abfa1e4
app/controllers/oauth/clients_controller.rb
@@ -2,6 +2,7 @@
 
 module Oauth
   class ClientsController < ApplicationController
+    skip_before_action :verify_authenticity_token
     skip_before_action :authenticate!
     before_action :apply_cache_headers
 
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: 2d37359e-c49d-4371-b586-d9dcc1800681
+X-Request-Id: 5f1ee7c9-fd72-4d91-b27f-4a18f47551a4
 Transfer-Encoding: chunked
 ```
 
doc/_includes/oauth-dynamic-client-registration.html
@@ -0,0 +1,82 @@
+
+#### POST http://localhost:5000/oauth/clients
+
+Example curl request:
+
+```bash
+$ curl http://localhost:5000/oauth/clients \
+  -X POST \
+  -d '{"redirect_uris":["https://rosenbaum.info","https://harberritchie.co.uk"],"client_name":"Gayle Lindgren","token_endpoint_auth_method":"client_secret_basic","logo_uri":"https://zulaufmurray.name","jwks_uri":"https://gulgowskischowalter.biz"}' \
+  -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
+```
+
+
+Request Body:
+```json
+{
+  "redirect_uris": [
+    "https://rosenbaum.info",
+    "https://harberritchie.co.uk"
+  ],
+  "client_name": "Gayle Lindgren",
+  "token_endpoint_auth_method": "client_secret_basic",
+  "logo_uri": "https://zulaufmurray.name",
+  "jwks_uri": "https://gulgowskischowalter.biz"
+}
+```
+
+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
+Cache-Control: no-cache, no-store
+Pragma: no-cache
+Content-Type: application/json; charset=utf-8
+Set-Cookie: _proof=a8764373d180a5ecccce3cce31a4f64d; path=/; HttpOnly
+X-Request-Id: e165ef5e-14d7-41f2-b4e4-cbc48c489daf
+Transfer-Encoding: chunked
+```
+
+
+Response Body:
+```json
+{
+  "client_id": "cdb39a8b-71bc-4687-8849-d438c039aece",
+  "client_secret": "J6q9bdMuhWuGjuY4w7VFhDgs",
+  "client_id_issued_at": 1540763754,
+  "client_secret_expires_at": 0,
+  "redirect_uris": [
+    "https://rosenbaum.info",
+    "https://harberritchie.co.uk"
+  ],
+  "grant_types": [
+    "authorization_code",
+    "refresh_token",
+    "client_credentials",
+    "password",
+    "urn:ietf:params:oauth:grant-type:saml2-bearer"
+  ],
+  "client_name": "Gayle Lindgren",
+  "token_endpoint_auth_method": "client_secret_basic",
+  "logo_uri": "https://zulaufmurray.name",
+  "jwks_uri": "https://gulgowskischowalter.biz"
+}
+```
+
+
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":"rUQ1YicQiRKkdSvnBgGut7U4"}' \
+  -d '{"grant_type":"authorization_code","code":"3cKqLL1A6zHw4EJbS8GCPV9g"}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic ZmE4NjllODItYzVhZC00MTlhLTk1ZDItMTQ4YTVmMTQxZWQ0Ojd2c0NORGV0YThzMzZteGJvS3ozUmY4Qw==" \
+  -H "Authorization: Basic MjEzYmJiZmUtNThiZi00NTQ0LWJkOWEtY2ViOTVmNjM5NTAyOmtITERpNllyYWt3Rnk0R2RINFRreGF0cg==" \
   -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 ZmE4NjllODItYzVhZC00MTlhLTk1ZDItMTQ4YTVmMTQxZWQ0Ojd2c0NORGV0YThzMzZteGJvS3ozUmY4Qw==
+Authorization: Basic MjEzYmJiZmUtNThiZi00NTQ0LWJkOWEtY2ViOTVmNjM5NTAyOmtITERpNllyYWt3Rnk0R2RINFRreGF0cg==
 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": "rUQ1YicQiRKkdSvnBgGut7U4"
+  "code": "3cKqLL1A6zHw4EJbS8GCPV9g"
 }
 ```
 
@@ -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/"67c79d67b32da000687d36fde2ce5ad9"
-Set-Cookie: _proof=640e75002bff77cc4948923a5bd7abae; path=/; HttpOnly
-X-Request-Id: 5e8d9d13-a3bf-45d3-8e40-fd1d0be9faa6
+Etag: W/"97f278c892b79b77c82e1d3d30808b7a"
+Set-Cookie: _proof=b9ebc968a2ccbbe921d90d25fcbcea09; path=/; HttpOnly
+X-Request-Id: d512efc6-050b-428b-a633-d504b88dd45b
 Transfer-Encoding: chunked
 ```
 
@@ -54,10 +54,10 @@ Transfer-Encoding: chunked
 Response Body:
 ```json
 {
-  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NjU5MTQsImlhdCI6MTU0MDc2MjMxNCwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjIzMTQsImF1ZCI6ImZhODY5ZTgyLWM1YWQtNDE5YS05NWQyLTE0OGE1ZjE0MWVkNCIsImp0aSI6IjY3ZmY1NjkzLWQxZmEtNDAxZS04M2E2LWQ0NWE4Y2JmMWIxYiIsInN1YiI6IjU3NmFmYTg0LTNkMDgtNDAxNi05ZDdlLTJmNzg1NDVhNzU1OSIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.B8AQ6TEejB0WgcGR5wj6UBR67-cbQ3qrP4lGRSPlzmtJYY53I0e8Zt_8MnEypbf0VOHHRuagi6OYvTjKJtCs3kTjpnHe0v0SgXzn2ZamxDgbPfRHinrYq84WyKfVXjoQfCT-S5CjXNhKDZbiCcLtminMlTEIOomUZtxVrZZNS-ifXT3ozXHCnLRIthp9DeNzDm-Fs5MFs_vtD7yHnlMFnCkvIajyB1zrhj31qqGfPkjErDJoYRr0x2-0XSGdJdsigSFXt_XtIhbOmisxwjwmLAFm41Zsld1oYPhJmyC3qg6DZ6x_zirvBn-5dJI7ti_02qXq2Ojqnf9yFu1-IDLZKg",
+  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NjczNTMsImlhdCI6MTU0MDc2Mzc1MywiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjM3NTMsImF1ZCI6IjIxM2JiYmZlLTU4YmYtNDU0NC1iZDlhLWNlYjk1ZjYzOTUwMiIsImp0aSI6IjIzMDVlNWMzLTg3MzUtNGJkZS1iYTIwLTNmMWMwMTQ0YWRhNSIsInN1YiI6IjdkZWE1MDBjLTIwYTItNGQyMy1hOWY3LTk2MzEyNDQ2ZGEwZSIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.JBl81fiZGPJ8CdYEVsFL0Hwdso8_pqyckk6sMpqq_WbH5AdvKuY-Ra8oFufY-Fa2pfT-Eh1bfSJhBUDg2sTO9AwN5EUEMd68YI314LaMQssbJspOEfeyvO97d0BwOQ2HWRUdEosFf840gFtDpue-cIJMmtTvIAe_87bwvgsbvcJYqjyZhq97ztPI1hQ49-RoRAc_A3qz0ZBntsdbmgWhWvYzMiSZMjLSEoAejsw9JSOjhpQtNgH0jxKDFfmTlDyh9DY54GG2BYTyb1m4JdLg2jTP1zv6JnHctzWN6YSStniqRjSaavCcI9FkRLLSLBPr11NvvpmIqsBNXCgn9OOVhQ",
   "token_type": "Bearer",
   "expires_in": 3600,
-  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA4NDg3MTQsImlhdCI6MTU0MDc2MjMxNCwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjIzMTQsImF1ZCI6ImZhODY5ZTgyLWM1YWQtNDE5YS05NWQyLTE0OGE1ZjE0MWVkNCIsImp0aSI6ImUzMzZhODZhLWNmNzUtNDQwYi05MWYyLTczOTM0MDE2ZTY2ZSIsInN1YiI6IjU3NmFmYTg0LTNkMDgtNDAxNi05ZDdlLTJmNzg1NDVhNzU1OSIsInRva2VuX3R5cGUiOiJyZWZyZXNoIn0.WuaH53015BkCfAolCNi3nzzb6wAgXAk4anAQpBBK49hYQqESxLAqwc5YoKVvULT4WC1GGxUwssWT_TaVHErBz_XwW6fqmPDDLRM_RjLDAEpWyt-hZ7c1k4LkipqhfTUB-DC6wpiIjc3TcJsc0gG-NKQvxOOPBiBAxvepWM6iXraKKB4AaJhR-lQKQo3eSGaiV0kuADVkBzohokrq0BBOtaPcS1HbRH5ECxTZkhTSRZKOitGUOtedlbkR7VRepqW9sgS-B6kDiuDNsp15HH9KxvVCXm8qCOtg7TFGjjKfnoBNEHR59pq5HcoFON8fNIsqFbpy72w6HcQPVhrM2iFiiw"
+  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA4NTAxNTMsImlhdCI6MTU0MDc2Mzc1MywiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjM3NTMsImF1ZCI6IjIxM2JiYmZlLTU4YmYtNDU0NC1iZDlhLWNlYjk1ZjYzOTUwMiIsImp0aSI6IjliNDc1NDg1LWQwYzMtNDRiNC1hMTcwLTBjYzNmNTE2MWNmNiIsInN1YiI6IjdkZWE1MDBjLTIwYTItNGQyMy1hOWY3LTk2MzEyNDQ2ZGEwZSIsInRva2VuX3R5cGUiOiJyZWZyZXNoIn0.cFcYvk8P69jstyHHMppRa7q-FD31RF10csSBF5-7yJrXSGZPkS1xsP2ZGXT7dYW2D1Wf8bK1blZUdEkzGRNY5bFLpJpZMXkiJ-9SY5kNyj8Eo7OTovZtivF_SZ4XeFFEBzyJJeFaaUyEOayHL-bCtGm5zbOFPZk3ESZK6wHtFkAbNgVjsbgM81kXRcpQxQUBNfov85tGKoiOP4KSnJuEyhPlfMs70JBAE7CRz-pmg_tjIMwlM4Qim6AgBtqNwJaLP-ygZBYtkm1Y0xbzL7q0J0G_kstm26RHQriYyJub1EpKMvFMRk33z7hpWllmdyYNpkpD39nnRC31sYBchhAZpA"
 }
 ```
 
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 MGEyNzA4ZWItZTNiMS00YWRlLTlmNzYtZTk2MjhlMjhkYTU5OlZyWVpXR2c3NzE2bjliVUo3UXZnbjVNVQ==" \
+  -H "Authorization: Basic MDk4NjNlYWItNjJiNi00ZmMwLWJhNzgtMmYzMjY1OWEwZGUyOmNZWTZMa1l4QkprM2U4bTExNjRxYm1NNw==" \
   -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 MGEyNzA4ZWItZTNiMS00YWRlLTlmNzYtZTk2MjhlMjhkYTU5OlZyWVpXR2c3NzE2bjliVUo3UXZnbjVNVQ==
+Authorization: Basic MDk4NjNlYWItNjJiNi00ZmMwLWJhNzgtMmYzMjY1OWEwZGUyOmNZWTZMa1l4QkprM2U4bTExNjRxYm1NNw==
 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/"cd185f0d1286505f4a5701807ec12cd9"
-Set-Cookie: _proof=95010ca8a3a3d34dad971a0242518a1c; path=/; HttpOnly
-X-Request-Id: 6b9219d3-c58f-4e83-bc86-d2d55ebe3caa
+Etag: W/"d8306b751703a2d0a409893ec0a7454b"
+Set-Cookie: _proof=e2df7b00252f44391f1fb25ed7d16df6; path=/; HttpOnly
+X-Request-Id: d60a27e0-d5cf-42ad-b889-d223cb2d90b9
 Transfer-Encoding: chunked
 ```
 
@@ -53,7 +53,7 @@ Transfer-Encoding: chunked
 Response Body:
 ```json
 {
-  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NjU5MTUsImlhdCI6MTU0MDc2MjMxNSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjIzMTUsImF1ZCI6IjBhMjcwOGViLWUzYjEtNGFkZS05Zjc2LWU5NjI4ZTI4ZGE1OSIsImp0aSI6ImUyMWE3NDIyLTJjOTYtNDU2OS04Yjk0LWZmMTY4ZmRjN2MyMCIsInN1YiI6IjBhMjcwOGViLWUzYjEtNGFkZS05Zjc2LWU5NjI4ZTI4ZGE1OSIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.gaGwUwMxQoWrhCVwLFVyfWEaLRrDIfUv6vvnarePDi5j0vFjw89_mH-c8SxXmaTxFai06MMrAfHynohWKO5wddkDG4s3LY_HVzYVDLbJ1LP404_HyIwpPHAI25np-RcPT_SLyquK_fN0q37Pe67YaP2EK7PqEsRU7yrDQU12erJ4jDLb_fUtJXAuIKmki7LucTiHK4gMV26rxcNRuZw1RvylfF_mEoH9JudKs6F4NMaPIqE1ZZ7sH53I6DJU0MpIFP_4LiGlPCMygJd407-bI6bQrRaiTJ25fvclOMQPc191d5PhJu2dr5eH47fPRGbTSGF4CWj-TOBS-BYmEvAnDw",
+  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NjczNTQsImlhdCI6MTU0MDc2Mzc1NCwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjM3NTQsImF1ZCI6IjA5ODYzZWFiLTYyYjYtNGZjMC1iYTc4LTJmMzI2NTlhMGRlMiIsImp0aSI6ImMyNjE1OTZhLTUyMTUtNDY0MS1hY2U1LWU4N2YxYzhkZDBhMyIsInN1YiI6IjA5ODYzZWFiLTYyYjYtNGZjMC1iYTc4LTJmMzI2NTlhMGRlMiIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.c7kPd6vUyBc4jen8wSzNgMNCeFd92LPbQgGVcjOIn8v8UM6zGCrHHCtaPWX9xopc1kBiPOvorwKYzFYTgIR9iN75dY2sOIWL0I9QaURf0a8W5CcrrhE_wySfVVUxaYBM1d4O9vAkFMYHuyFef_lMwrlGSkSBViQHnZt7nq39HglG1tKLeVDnM95-lv9aQ30TC2E-ahHrT9IR6IyXOp86ttrUbR-0_Y9ee55Iy9jOih15K1IKk2s0cJx0Pziir9nntjBqeiMLKANxc2HCRRb9vQtRDcbV8k2TxyP-45j7KhasPqrlw_nmwkX5SOAdzipADoxT-gE4TF8JU-M4jDnXXA",
   "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":"florrie_macejkovic@mrazmayert.com","password":"4IegTCznq0"}' \
+  -d '{"grant_type":"password","username":"angelica@johnson.co.uk","password":"AppuTs4iS"}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic M2Y3OTBlMmMtYTE2ZC00NGNkLWE0NDAtNDQ1ODZjNWQ4OTI0OkhaNnJ2MkE4aHBnNzRNRndSamk3c2N5Ng==" \
+  -H "Authorization: Basic NzZjNmRiYzYtNGU5MC00NDc1LWFhYWQtY2RiNmQ1ZGUwZDVhOmpYeUpTU3RLc2Z5TVg4czFhUEd6V3ZhWg==" \
   -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 M2Y3OTBlMmMtYTE2ZC00NGNkLWE0NDAtNDQ1ODZjNWQ4OTI0OkhaNnJ2MkE4aHBnNzRNRndSamk3c2N5Ng==
+Authorization: Basic NzZjNmRiYzYtNGU5MC00NDc1LWFhYWQtY2RiNmQ1ZGUwZDVhOmpYeUpTU3RLc2Z5TVg4czFhUEd6V3ZhWg==
 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": "florrie_macejkovic@mrazmayert.com",
-  "password": "4IegTCznq0"
+  "username": "angelica@johnson.co.uk",
+  "password": "AppuTs4iS"
 }
 ```
 
@@ -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/"190602448f7d729c8572c14304839355"
-Set-Cookie: _proof=cdb9559660eb3d8729128eed7311795d; path=/; HttpOnly
-X-Request-Id: 660df46b-8d70-4ba7-995d-b0ad0e6f060b
+Etag: W/"b59d675e5ebf49b365d4437c34fdf7b3"
+Set-Cookie: _proof=72fdf98c6f5c56194e087e29bd52dc0a; path=/; HttpOnly
+X-Request-Id: e91c5611-bd78-477d-a3a9-3d4ae27aacdd
 Transfer-Encoding: chunked
 ```
 
@@ -55,10 +55,10 @@ Transfer-Encoding: chunked
 Response Body:
 ```json
 {
-  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NjU5MTUsImlhdCI6MTU0MDc2MjMxNSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjIzMTUsImF1ZCI6IjNmNzkwZTJjLWExNmQtNDRjZC1hNDQwLTQ0NTg2YzVkODkyNCIsImp0aSI6ImY0NTliNmMzLTkyODYtNDRiNS1iYmE2LTljNjFhMzRhZjE1ZiIsInN1YiI6IjRmMDUyM2JlLThjYjQtNDEyNC04ZmE4LWVlMGZiOWRkYjlkMCIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.gkQipJzzkFVHewGbE-D4rdswU8hr5OXEl9N8-5B2XFksSLcYllOgXAl-mFjctaxDc5CdbbMthmdofeE-7PUbdLfZFs1Z0oFUdrFObu1rg7bhlnsOn9L6rAk3bp4vcLixL77pu8hT4JMXKTMkT5ZX8v_gg_rkn-QUL9NKPzEn3jv9uhJYSkprXxvNA9xi2lxX8Fekdv4kDoOhc1MQXzDL1SvvbiLrR6x1DqAEnxh2elMtWbpun4Bi1RGLNAtq89FrlU1USb69WPv0P-9xjLksjUPlpUR9B8SvGli5UMOxlQk_dMwLkF9dA-w0o3ma-vRlQJseShhR9BvEL8xCUTpgKw",
+  "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NjczNTMsImlhdCI6MTU0MDc2Mzc1MywiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjM3NTMsImF1ZCI6Ijc2YzZkYmM2LTRlOTAtNDQ3NS1hYWFkLWNkYjZkNWRlMGQ1YSIsImp0aSI6ImVjMDI3Zjg0LTIxYjgtNGY2Yi05ZjNkLWMxNWZmYThmMWM1ZCIsInN1YiI6ImRiNmFmZjRlLTc2MTYtNGY4MS05ZjY3LTJlMGFlMzAyYzk0MiIsInRva2VuX3R5cGUiOiJhY2Nlc3MifQ.VQh2YKiCOYC2wJAaex8GjH6watD7p1dtk_l8uH94y-LBppBkj4MhbFPm73bKcrXvgTbS-JdoS2WF5l9gKPGh1pTIhucVLlHiauKGqcEHmGO0RrfHG5K7OldptRiG71C82T5bZjIBBzppRLd3rjFMhyeZ19ATfDp63Aj9xiGzI__UrNwqcM_dpRzsLaSBvWlp77YvVFVbRkTZgr7_t0FlZwjYIurW0IRGz_yL128ESRIQY3TlD3Ik0YMxhYEW_-RSz8kY908oCA_oo-yf02JOt8IO2f7U_8nuM02SJ7akkxwLxR2moj34XRXlslSEnJMbF7LtEU15zDkiOceGxBjLZw",
   "token_type": "Bearer",
   "expires_in": 3600,
-  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA4NDg3MTUsImlhdCI6MTU0MDc2MjMxNSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjIzMTUsImF1ZCI6IjNmNzkwZTJjLWExNmQtNDRjZC1hNDQwLTQ0NTg2YzVkODkyNCIsImp0aSI6IjA2MTcxNjQwLTllOGItNDE3Yy1hZDY5LWJhMjI1YWE1N2U3NiIsInN1YiI6IjRmMDUyM2JlLThjYjQtNDEyNC04ZmE4LWVlMGZiOWRkYjlkMCIsInRva2VuX3R5cGUiOiJyZWZyZXNoIn0.IhaG-exXBF8TwKbtpJUiQ8BCIpcu9a4Wpq8EkIQ4r1iYc3N2PPiTYoO7otr8zzT0illEwXp8Xhyo3X-aFXbOi3_bVXPKJYJCfSG_GRV6L7As79r7MGmdNZN5s3YCSmWYfAT08lg13W93spiwJQv5iE64AY-ZvARMQebpu5raEFhGD8VbleknJyIPWlQaBGayadYkoFkFdVpX1n5imORSdavSfCX_FomXNgA9BQfvGHy5FyhM3RSNddgbwEW0q9l7H9wEYksj4hW28oHBmHbWZZ0uP-n-ls2MGPn3lWDMXxlLNROL52Kl8QLUtmyzet8_7HnmBROS0bh1Wogc969OYg"
+  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA4NTAxNTMsImlhdCI6MTU0MDc2Mzc1MywiaXNzIjoiaHR0cDovL3Byb29mLnRlc3QvbWV0YWRhdGEiLCJuYmYiOjE1NDA3NjM3NTMsImF1ZCI6Ijc2YzZkYmM2LTRlOTAtNDQ3NS1hYWFkLWNkYjZkNWRlMGQ1YSIsImp0aSI6IjRmZGI3NDAzLTBlMmYtNGRiYS1iODYxLTAwYzRmYjZlYzIxOSIsInN1YiI6ImRiNmFmZjRlLTc2MTYtNGY4MS05ZjY3LTJlMGFlMzAyYzk0MiIsInRva2VuX3R5cGUiOiJyZWZyZXNoIn0.oEqarqcTPDXyZDbJgdEGMnYXOs0f8CrNpUrR99o7vooQ9BMht802MrzQ-AhASS4zxaHyYEvr8ldjw4af1mks-tf15HhB21A7GQv6K51iYsirtbxVKMcI8X-J_iwlaBspxwa6ADd497ZTUzmAUg9qPSY8Aunf4l3VprMBbQ9wvhwtmiFowRgWCguEt3x7YsC9PCeGLDYOUnRifg3_btAqcrdH7xoLpk4mSHDys6lR2HY6xFGSbfa_y8kF13LHemOSpJWXcdTSImGgVusEpxfaIh_p7A_3yeKLAkl0RF78yH66UoeDvNkpQBU5YvqWLC27cc--kixvnUj21qnXZhYNKA"
 }
 ```
 
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.eyJleHAiOjE1NDA3NjU5MTUsImlhdCI6MTU0MDc2MjMxNSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2MjMxNSwiYXVkIjoiZTBjNDczM2UtNDAzZi00NzUwLTk5NDctOTQ3YzUyNDA2Y2JlIiwianRpIjoiNzgyN2YzNmQtNmM5OS00NGNhLTg1OTItMzdiODBlNGRlNGI4Iiwic3ViIjoiZjkxOGUzNzgtYThkNS00YjcyLTgzMjctNjNlYzI3MmFiZmFkIiwidG9rZW5fdHlwZSI6InJlZnJlc2gifQ.MTf7CbeGTU6aqCmkDymlzxqLTWRRkTS0fkJh0qqkl8Giu51OO8FkxkKqVPmPlQsK6bFhJWaGt6pYc400pFQevg7acvsjE_eySzA6C2tT9_x1bqPVzedj6tysInroPA5KvRPlMijbG7XzsgPOJPsJbVlPwA5CspGHzENOIkCyxIeVu-myGOmGrwEXiz0zGXfSN9T1bw68dHpXdQ8FLIA9pIwBPq8tFqtyP0JDwGj4Aa0hImyYJBLbEfJVkd09UU63h3oZFkRjaVLuRjtbZAEcOrmwmcSoBzSxQDSAaayu2Famd1MSobwAQFvdlV1E4lxSsrzbxb59ZO80fx48sCgcSA"}' \
+  -d '{"grant_type":"refresh_token","refresh_token":"eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NjczNTQsImlhdCI6MTU0MDc2Mzc1NCwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2Mzc1NCwiYXVkIjoiNDRkOTkwZDYtODMwMS00YWU5LTkwYzEtMzc2YzAzYThhYTVlIiwianRpIjoiZDNhMTY2OWMtNmMyNC00MDQ2LTliZGQtMWMyZDE3YzBhNTQ5Iiwic3ViIjoiNzcyOTliNjItMWI0MC00MGY1LTkzYTktZjc3Nzg3ZjQ3M2IxIiwidG9rZW5fdHlwZSI6InJlZnJlc2gifQ.eoRSeivC8MvwrRrF-0mzCwAP07W92VdF336nmp6lIpBqsWUfYYQ9t-xS7xmgGIh6cU_EA3hbJ1eEk-KHe8X8CXKG1FESq9YnNzvMyEAfsS9dppr6JhRgkCknXYyWfk48DZZSn8hNipBaBOUeXQAxF-X6HFX1tW50JFSbEppCt3BU81Z8AY73qm3Y1Gl9X-JYmJcxHg91r5vK1XaxDkW-yZ_zSpLeT4vrQR7Le4r34aQqsZBwSsgcpofZot3LX8h3apgwkOEYSXYHAqTwljPocXSvDQeN7x3fjaNkjr8dAvnFP9rdr7FsfwHmpTIl4xfdihCrqfQxMGZmlM9B6pS_MQ"}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic ZTBjNDczM2UtNDAzZi00NzUwLTk5NDctOTQ3YzUyNDA2Y2JlOnNoZ1pNUFoyZkVxM1VNaVoyQWNGYmJXUw==" \
+  -H "Authorization: Basic NDRkOTkwZDYtODMwMS00YWU5LTkwYzEtMzc2YzAzYThhYTVlOmhUb1BZampEajRWcjJGazhzQ1pIYXJNNw==" \
   -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 ZTBjNDczM2UtNDAzZi00NzUwLTk5NDctOTQ3YzUyNDA2Y2JlOnNoZ1pNUFoyZkVxM1VNaVoyQWNGYmJXUw==
+Authorization: Basic NDRkOTkwZDYtODMwMS00YWU5LTkwYzEtMzc2YzAzYThhYTVlOmhUb1BZampEajRWcjJGazhzQ1pIYXJNNw==
 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.eyJleHAiOjE1NDA3NjU5MTUsImlhdCI6MTU0MDc2MjMxNSwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2MjMxNSwiYXVkIjoiZTBjNDczM2UtNDAzZi00NzUwLTk5NDctOTQ3YzUyNDA2Y2JlIiwianRpIjoiNzgyN2YzNmQtNmM5OS00NGNhLTg1OTItMzdiODBlNGRlNGI4Iiwic3ViIjoiZjkxOGUzNzgtYThkNS00YjcyLTgzMjctNjNlYzI3MmFiZmFkIiwidG9rZW5fdHlwZSI6InJlZnJlc2gifQ.MTf7CbeGTU6aqCmkDymlzxqLTWRRkTS0fkJh0qqkl8Giu51OO8FkxkKqVPmPlQsK6bFhJWaGt6pYc400pFQevg7acvsjE_eySzA6C2tT9_x1bqPVzedj6tysInroPA5KvRPlMijbG7XzsgPOJPsJbVlPwA5CspGHzENOIkCyxIeVu-myGOmGrwEXiz0zGXfSN9T1bw68dHpXdQ8FLIA9pIwBPq8tFqtyP0JDwGj4Aa0hImyYJBLbEfJVkd09UU63h3oZFkRjaVLuRjtbZAEcOrmwmcSoBzSxQDSAaayu2Famd1MSobwAQFvdlV1E4lxSsrzbxb59ZO80fx48sCgcSA"
+  "refresh_token": "eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE1NDA3NjczNTQsImlhdCI6MTU0MDc2Mzc1NCwiaXNzIjoiaHR0cDovL3Byb29mLnRlc3Q6NTAwMC9tZXRhZGF0YSIsIm5iZiI6MTU0MDc2Mzc1NCwiYXVkIjoiNDRkOTkwZDYtODMwMS00YWU5LTkwYzEtMzc2YzAzYThhYTVlIiwianRpIjoiZDNhMTY2OWMtNmMyNC00MDQ2LTliZGQtMWMyZDE3YzBhNTQ5Iiwic3ViIjoiNzcyOTliNjItMWI0MC00MGY1LTkzYTktZjc3Nzg3ZjQ3M2IxIiwidG9rZW5fdHlwZSI6InJlZnJlc2gifQ.eoRSeivC8MvwrRrF-0mzCwAP07W92VdF336nmp6lIpBqsWUfYYQ9t-xS7xmgGIh6cU_EA3hbJ1eEk-KHe8X8CXKG1FESq9YnNzvMyEAfsS9dppr6JhRgkCknXYyWfk48DZZSn8hNipBaBOUeXQAxF-X6HFX1tW50JFSbEppCt3BU81Z8AY73qm3Y1Gl9X-JYmJcxHg91r5vK1XaxDkW-yZ_zSpLeT4vrQR7Le4r34aQqsZBwSsgcpofZot3LX8h3apgwkOEYSXYHAqTwljPocXSvDQeN7x3fjaNkjr8dAvnFP9rdr7FsfwHmpTIl4xfdihCrqfQxMGZmlM9B6pS_MQ"
 }
 ```
 
@@ -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=011d82b831995a0bb05572bece8365e8; path=/; HttpOnly
-X-Request-Id: 2ba9c419-c283-4f99-afb2-5f011a4275b1
+Set-Cookie: _proof=6ace2b0842c4e58b25c5be9e9a72e55e; path=/; HttpOnly
+X-Request-Id: 734ca2e1-91a4-4d1c-80f5-f0c7f8e03dbe
 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":"PEFzc2VydGlvbiB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgSUQ9Il81NTEwMjMzYy02YmVkLTRhZWItYTY2OC01MjZlNWQ3Zjg1YzQiIElzc3VlSW5zdGFudD0iMjAxOC0xMC0yOFQyMTozMTo1NVoiIFZlcnNpb249IjIuMCI-PElzc3Vlcj5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9Jc3N1ZXI-PFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI-PFNpZ25lZEluZm8-PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxSZWZlcmVuY2UgVVJJPSIjXzU1MTAyMzNjLTZiZWQtNGFlYi1hNjY4LTUyNmU1ZDdmODVjNCI-PFRyYW5zZm9ybXM-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvVHJhbnNmb3Jtcz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8-PERpZ2VzdFZhbHVlPm9jVTRoNnZDRk96QzFPM0lubm9NeXZwd1NOVWRpUXNaK2h3UFBxaHNMRzQ9PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8-PFNpZ25hdHVyZVZhbHVlPnNYS1REbC9oOU5WU1JXV3lPMFRYZExlVytoQWxma1lEWU1FWGFzWm1ySm5lblRHQ0ZSMHc1T2ZadFFPSjVhQWNTeEx5N1lyM3kwWVQ5MTNGNEx0QlUyQVhxYnRVby9EbW1WRno2K25RS0NDRjM1SHF3RVkwb1h5d3RuaFVyYXFxeHEvWWU4K3lVRWNZbUxQSmpKcklMOHdzbFZHUTdrSk9QOTN3bEkvR3kxNW5INlJyVkhDZVB4SHd2ZDVqS044SXRpaGJvWm5nOWtScEozamg4MXBwTGdYR29CY0UvdUxEVGY0Y0UrRWZPVFZrRjZUTjZzQkY0Qm5zcldBUitPcUR4OHY3TU9jbkNLSlBuNGt1dStCYWFIS2g2UmJ2ZDZwWmM2Wk1jaGx2QVdvY3RNK2ZkS2JwaG9JYW4rdDNPMGo3VnN0dlQ5OEJ2TDZ0ZzZFaXZFT21kUT09PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbz48WDUwOURhdGE-PFg1MDlDZXJ0aWZpY2F0ZT5NSUlETnpDQ0FoK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQURCZk1Rc3dDUVlEVlFRR0V3SkRRVEVMTUFrR0ExVUVDQXdDUVVJeEVEQU9CZ05WQkFjTUIwTmhiR2RoY25reER6QU5CZ05WQkFvTUJsaHRiRXRwZERFUE1BMEdBMVVFQ3d3R1dHMXNTMmwwTVE4d0RRWURWUVFEREFaWWJXeExhWFF3SGhjTk1UZ3hNREk0TWpFek1UVXpXaGNOTVRneE1USTNNakV6TVRVeldqQmZNUXN3Q1FZRFZRUUdFd0pEUVRFTE1Ba0dBMVVFQ0F3Q1FVSXhFREFPQmdOVkJBY01CME5oYkdkaGNua3hEekFOQmdOVkJBb01CbGh0YkV0cGRERVBNQTBHQTFVRUN3d0dXRzFzUzJsME1ROHdEUVlEVlFRRERBWlliV3hMYVhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURSM1daQk1OVkh1b2dBNFZuZC9aSGUrVktUYVpHLzdkSzR0UFZud1F1NUowa1lQRUJabzVacFQzeFpDaG5SaUYybVVPb0krWDdld1ZCMEFBWWMwc2s4VTdEeGVjeDRnSzdxdjQzT3hGaWNoZlRtT01rTFdKZS9YczkvS2xuRTIxNkZMS1VrcTJ0RzVYKzhJSnFZdWQ2RVJ4SjhuVnhJUEh0WUFFcW5OMHZLUVp5UmduRzFNcW14ZUdqQnhSL1JmKzI0ZEMrOS9kT2Vza0U1V2JlZm1WQVN3eW1HN3NkS29ieGQ4YUgwcC9sOUFYZjdJcGU1SGxTM3J1bGJpcVNlam9GTmdYWnJ5bHpSZ0c0Nnc2MTFkQkhzcE5NcXRCSTlwK3dBNEF0UVlOOEh0K0V5NFFyL1FHYWkvZXRQVUhTMUs5VEExYmRLazRBSnNqdVNUZVFRSUN5YkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQU1WTzVERC9ZV0EzOExDK0F6d2Z3RHFLN0VCcDFpVkhvRVdJajAxUkZacHdXKy80SmNkMUdmeGtHaGJWRldldmI4ZFduNGZXOVBzZEt6RG12MjJ0ZkFTT0RDT2dTaTdveHFoRzZNUnFRaE53QVdIazBjalBaV2N3b1lOL0dMU1JPYVRnOEtOZllxODBUNCtQc0tCT1A2NXpLZ1hPM2ZPUmNldFJUZzFPS2tMcWJDWU9zbmlrRVprcUt1YjFyQUdoMlVsdVNUSWg0eXJCOTRqZ2NIRzdXUzdMMTFKTG1PeXJhTDFNSks0a01pOUR5Q2dJNkJNUjVwRVNsQlZTRzNEU1hMWUkzajkwazBoQlk1WHczYXltdGtWZHgvSDFGK1lEdGZmMStCcXRxZUxseUViVHgxR0w2QVJtdEVTRFVyK3VkcjVTWHF6VHRRbTFhZXJEQVVaK2hNRT08L1g1MDlDZXJ0aWZpY2F0ZT48L1g1MDlEYXRhPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48U3ViamVjdD48TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPm5lb21pX2dsb3ZlckB0cmFudG93YmVkbmFyLmluZm88L05hbWVJRD48U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSBJblJlc3BvbnNlVG89Il82ZTFlOTQ4ZS1jN2ZiLTQzNjAtYTdhNC1kYjFjYzQwOWNjMjciIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOFQyMTozNjo1NVoiLz48L1N1YmplY3RDb25maXJtYXRpb24-PC9TdWJqZWN0PjxDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAxOC0xMC0yOFQyMTozMTo1NVoiIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOVQwMDozMTo1NVoiPjxBdWRpZW5jZVJlc3RyaWN0aW9uPjxBdWRpZW5jZT5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9BdWRpZW5jZT48L0F1ZGllbmNlUmVzdHJpY3Rpb24-PC9Db25kaXRpb25zPjxBdXRoblN0YXRlbWVudCBBdXRobkluc3RhbnQ9IjIwMTgtMTAtMjhUMjE6MzE6NTVaIiBTZXNzaW9uSW5kZXg9Il81NTEwMjMzYy02YmVkLTRhZWItYTY2OC01MjZlNWQ3Zjg1YzQiPjxBdXRobkNvbnRleHQ-PEF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkPC9BdXRobkNvbnRleHRDbGFzc1JlZj48L0F1dGhuQ29udGV4dD48L0F1dGhuU3RhdGVtZW50PjxBdHRyaWJ1dGVTdGF0ZW1lbnQ-PEF0dHJpYnV0ZSBOYW1lPSJpZCI-PEF0dHJpYnV0ZVZhbHVlPjFhOTZhMjlmLWY1OWUtNGEzOS1hM2QwLTBmMjJkM2RkOGViZjwvQXR0cmlidXRlVmFsdWU-PC9BdHRyaWJ1dGU-PEF0dHJpYnV0ZSBOYW1lPSJlbWFpbCI-PEF0dHJpYnV0ZVZhbHVlPm5lb21pX2dsb3ZlckB0cmFudG93YmVkbmFyLmluZm88L0F0dHJpYnV0ZVZhbHVlPjwvQXR0cmlidXRlPjxBdHRyaWJ1dGUgTmFtZT0iY3JlYXRlZF9hdCI-PEF0dHJpYnV0ZVZhbHVlPjIwMTgtMTAtMjggMjE6MzE6NTUgVVRDPC9BdHRyaWJ1dGVWYWx1ZT48L0F0dHJpYnV0ZT48L0F0dHJpYnV0ZVN0YXRlbWVudD48L0Fzc2VydGlvbj4K"}' \
+  -d '{"grant_type":"urn:ietf:params:oauth:grant-type:saml2-bearer","assertion":"PEFzc2VydGlvbiB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgSUQ9Il9jZDQwNjUzZi1hMzNiLTQ2MzUtYTAwMS0yNDY0NGY2YmRiMDQiIElzc3VlSW5zdGFudD0iMjAxOC0xMC0yOFQyMTo1NTo1NFoiIFZlcnNpb249IjIuMCI-PElzc3Vlcj5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9Jc3N1ZXI-PFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI-PFNpZ25lZEluZm8-PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxSZWZlcmVuY2UgVVJJPSIjX2NkNDA2NTNmLWEzM2ItNDYzNS1hMDAxLTI0NjQ0ZjZiZGIwNCI-PFRyYW5zZm9ybXM-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvVHJhbnNmb3Jtcz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8-PERpZ2VzdFZhbHVlPlFGQzdBWUhzTSs5SGF5cjlMNndSbWJZbTRyV0xBMytlbGo4WTFkcWV5L009PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8-PFNpZ25hdHVyZVZhbHVlPk5CQmhzWVlHY1prbWo4SmNGTi92ZDNDWEtwb1ZGLzRVeHlvamg5L0IzVW1aQ1d4WEdSUVVwazk0Q2F0Sjl6RXQzMlNZU3ZTWnQvbDIwb015YWcvOTd4QllNYXdjd3RDYUZXa2pRd2plamp0cTU4K0p3eGtXNlRJV2NrQTRGTmRDaGZzaGFzNE5aelAveHBGVkcxS3k2dVYyZkd5M0ZrRDVYa0xYOVlNb2FnSkM3bEdacXB6KzZkNGdqeVJOdlFQU2hxZC9PTUZxV3Vnek9QU1BkMkxXd1RhU3VGa2IraFJxck5jbnlzeHZRQWgxZVZ4VGIySnVTbU1VTHBQL1hRcUhiQnpwZ1F5bXZkSGwvd3dRekVxVTIrUVpiRytoMGVhT3Nyb2t1MUorOFYwcXBGMW9aWUJpaW50VkZNMllmZ0Rwb0w3QWJtSit4ZHIzb3RHcjkyM3A0UT09PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbz48WDUwOURhdGE-PFg1MDlDZXJ0aWZpY2F0ZT5NSUlETnpDQ0FoK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQURCZk1Rc3dDUVlEVlFRR0V3SkRRVEVMTUFrR0ExVUVDQXdDUVVJeEVEQU9CZ05WQkFjTUIwTmhiR2RoY25reER6QU5CZ05WQkFvTUJsaHRiRXRwZERFUE1BMEdBMVVFQ3d3R1dHMXNTMmwwTVE4d0RRWURWUVFEREFaWWJXeExhWFF3SGhjTk1UZ3hNREk0TWpFMU5UVXhXaGNOTVRneE1USTNNakUxTlRVeFdqQmZNUXN3Q1FZRFZRUUdFd0pEUVRFTE1Ba0dBMVVFQ0F3Q1FVSXhFREFPQmdOVkJBY01CME5oYkdkaGNua3hEekFOQmdOVkJBb01CbGh0YkV0cGRERVBNQTBHQTFVRUN3d0dXRzFzUzJsME1ROHdEUVlEVlFRRERBWlliV3hMYVhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMzUUpjWkFNN25DUjlQWHV0d3R5cXNvOVI5RW1rY003K1dzYzFMU3l2ZkY2Nytmcm5iY3VURE1VbUR0SFNqMkJsUmZrSzVJZ3IvL2RYY1dTVlhPSVJWdkxhdFBydVh5ZW5QVy9hcFlrQm5ZVm1YSWxZb21qSy9od1p4T1RXSHBBV2praEM0MHE0eFVjOHVoNTYrcFdmdjcxNFcxbzBkalFsZHVlRmxnWUF0dDc0SUNoM0k0Zll4aXpyQmZTSEMydVNWU0FMZlhwMUY5KzAvQVJWUm93cGljQ2YrcnJYYjN3MUxBN1Q3Qk9nTjZYVStadm54NFlmQStGei9CTVNlZ3E3cTA5eHhpTlRiNkRGZ3I2Y0pnL05IZHZNdGlwcUFzbWk1b0w2T2RXeUZqTHQvUklvallJRFlzaGtSbFdTMTlWNEpYNTlEOFc4LzNSY1YvK3JhRFFrakFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUZhNnRweXM1ZkRPUDZRMkdjWmoreFVrd1dJUVNQMVplelErMm8wSlJvY2k1WU40RWtBUFlZMFliS0xKWGNnalBYR3ZOOXk3WmpzUy9rL1BLU1VidElDdUdndS9IZ2dLL25IS0toR2ZxalpQUFNHcnNsdForV3VUVml0ZnhHaTllMjVaTFRSU0pOZEF4V2ZBVzJPVFBiL01UYStqQzgxTjVuMzU4Q2QrdmFLZ1lDYktyRUYrRW1TMmdYTXlYQmFRUWNuK0VWNC9oV3lQTUI3SHZpaXpYenQrdm5kUittdVJWdW5ndUwxdlZFQTJ0MEhmSTc2R2IvT0czcmRUZFkxMnJERkhuTDRZSFNiL2JxTVBNZGowVXBGNzlaUVBEYXRlK3laSlRuSlFUVnpOU213QTNUZGxiRnhJcEpFWGdpeGdxSTJSK3R4azk5K01nT2RxTmhNZDNYMD08L1g1MDlDZXJ0aWZpY2F0ZT48L1g1MDlEYXRhPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48U3ViamVjdD48TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPmplYW5lLmxlZ3Jvc0BlbW1lcmljaC51czwvTmFtZUlEPjxTdWJqZWN0Q29uZmlybWF0aW9uIE1ldGhvZD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmNtOmJlYXJlciI-PFN1YmplY3RDb25maXJtYXRpb25EYXRhIEluUmVzcG9uc2VUbz0iXzhmMjgyYzNiLTBmZmYtNDIyYi05ZmI3LWI2MGI5YTRhMTM4MCIgTm90T25PckFmdGVyPSIyMDE4LTEwLTI4VDIyOjAwOjU0WiIvPjwvU3ViamVjdENvbmZpcm1hdGlvbj48L1N1YmplY3Q-PENvbmRpdGlvbnMgTm90QmVmb3JlPSIyMDE4LTEwLTI4VDIxOjU1OjU0WiIgTm90T25PckFmdGVyPSIyMDE4LTEwLTI5VDAwOjU1OjU0WiI-PEF1ZGllbmNlUmVzdHJpY3Rpb24-PEF1ZGllbmNlPmh0dHA6Ly9wcm9vZi50ZXN0OjUwMDAvbWV0YWRhdGE8L0F1ZGllbmNlPjwvQXVkaWVuY2VSZXN0cmljdGlvbj48L0NvbmRpdGlvbnM-PEF1dGhuU3RhdGVtZW50IEF1dGhuSW5zdGFudD0iMjAxOC0xMC0yOFQyMTo1NTo1NFoiIFNlc3Npb25JbmRleD0iX2NkNDA2NTNmLWEzM2ItNDYzNS1hMDAxLTI0NjQ0ZjZiZGIwNCI-PEF1dGhuQ29udGV4dD48QXV0aG5Db250ZXh0Q2xhc3NSZWY-dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmQ8L0F1dGhuQ29udGV4dENsYXNzUmVmPjwvQXV0aG5Db250ZXh0PjwvQXV0aG5TdGF0ZW1lbnQ-PEF0dHJpYnV0ZVN0YXRlbWVudD48QXR0cmlidXRlIE5hbWU9ImlkIj48QXR0cmlidXRlVmFsdWU-MWZiZjI5ODQtMmQwYi00MmUzLThkYjUtYTVjOWUxNzZhYWJiPC9BdHRyaWJ1dGVWYWx1ZT48L0F0dHJpYnV0ZT48QXR0cmlidXRlIE5hbWU9ImVtYWlsIj48QXR0cmlidXRlVmFsdWU-amVhbmUubGVncm9zQGVtbWVyaWNoLnVzPC9BdHRyaWJ1dGVWYWx1ZT48L0F0dHJpYnV0ZT48QXR0cmlidXRlIE5hbWU9ImNyZWF0ZWRfYXQiPjxBdHRyaWJ1dGVWYWx1ZT4yMDE4LTEwLTI4IDIxOjU1OjU0IFVUQzwvQXR0cmlidXRlVmFsdWU-PC9BdHRyaWJ1dGU-PC9BdHRyaWJ1dGVTdGF0ZW1lbnQ-PC9Bc3NlcnRpb24-Cg=="}' \
   -H "Accept: application/json" \
   -H "Content-Type: application/json" \
   -H "User-Agent: net/hippie 0.1.9" \
-  -H "Authorization: Basic OGE3ZDQ4MDEtMjlkMi00MDYzLTk3NmQtZmE0MDhiMDI4ZThjOjZxVkhTZXlkZlhGc2tuTTU4RUd5NDNNRA==" \
+  -H "Authorization: Basic ZWNhYzUxN2EtZDA1OC00MzllLTg5NDktMmMzOTJjNWE5MzE2OjZKR1lYaXZYeHZ2MldMUkVzV1JGMk4xUA==" \
   -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 OGE3ZDQ4MDEtMjlkMi00MDYzLTk3NmQtZmE0MDhiMDI4ZThjOjZxVkhTZXlkZlhGc2tuTTU4RUd5NDNNRA==
+Authorization: Basic ZWNhYzUxN2EtZDA1OC00MzllLTg5NDktMmMzOTJjNWE5MzE2OjZKR1lYaXZYeHZ2MldMUkVzV1JGMk4xUA==
 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": "PEFzc2VydGlvbiB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgSUQ9Il81NTEwMjMzYy02YmVkLTRhZWItYTY2OC01MjZlNWQ3Zjg1YzQiIElzc3VlSW5zdGFudD0iMjAxOC0xMC0yOFQyMTozMTo1NVoiIFZlcnNpb249IjIuMCI-PElzc3Vlcj5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9Jc3N1ZXI-PFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI-PFNpZ25lZEluZm8-PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxSZWZlcmVuY2UgVVJJPSIjXzU1MTAyMzNjLTZiZWQtNGFlYi1hNjY4LTUyNmU1ZDdmODVjNCI-PFRyYW5zZm9ybXM-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvVHJhbnNmb3Jtcz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8-PERpZ2VzdFZhbHVlPm9jVTRoNnZDRk96QzFPM0lubm9NeXZwd1NOVWRpUXNaK2h3UFBxaHNMRzQ9PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8-PFNpZ25hdHVyZVZhbHVlPnNYS1REbC9oOU5WU1JXV3lPMFRYZExlVytoQWxma1lEWU1FWGFzWm1ySm5lblRHQ0ZSMHc1T2ZadFFPSjVhQWNTeEx5N1lyM3kwWVQ5MTNGNEx0QlUyQVhxYnRVby9EbW1WRno2K25RS0NDRjM1SHF3RVkwb1h5d3RuaFVyYXFxeHEvWWU4K3lVRWNZbUxQSmpKcklMOHdzbFZHUTdrSk9QOTN3bEkvR3kxNW5INlJyVkhDZVB4SHd2ZDVqS044SXRpaGJvWm5nOWtScEozamg4MXBwTGdYR29CY0UvdUxEVGY0Y0UrRWZPVFZrRjZUTjZzQkY0Qm5zcldBUitPcUR4OHY3TU9jbkNLSlBuNGt1dStCYWFIS2g2UmJ2ZDZwWmM2Wk1jaGx2QVdvY3RNK2ZkS2JwaG9JYW4rdDNPMGo3VnN0dlQ5OEJ2TDZ0ZzZFaXZFT21kUT09PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbz48WDUwOURhdGE-PFg1MDlDZXJ0aWZpY2F0ZT5NSUlETnpDQ0FoK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQURCZk1Rc3dDUVlEVlFRR0V3SkRRVEVMTUFrR0ExVUVDQXdDUVVJeEVEQU9CZ05WQkFjTUIwTmhiR2RoY25reER6QU5CZ05WQkFvTUJsaHRiRXRwZERFUE1BMEdBMVVFQ3d3R1dHMXNTMmwwTVE4d0RRWURWUVFEREFaWWJXeExhWFF3SGhjTk1UZ3hNREk0TWpFek1UVXpXaGNOTVRneE1USTNNakV6TVRVeldqQmZNUXN3Q1FZRFZRUUdFd0pEUVRFTE1Ba0dBMVVFQ0F3Q1FVSXhFREFPQmdOVkJBY01CME5oYkdkaGNua3hEekFOQmdOVkJBb01CbGh0YkV0cGRERVBNQTBHQTFVRUN3d0dXRzFzUzJsME1ROHdEUVlEVlFRRERBWlliV3hMYVhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURSM1daQk1OVkh1b2dBNFZuZC9aSGUrVktUYVpHLzdkSzR0UFZud1F1NUowa1lQRUJabzVacFQzeFpDaG5SaUYybVVPb0krWDdld1ZCMEFBWWMwc2s4VTdEeGVjeDRnSzdxdjQzT3hGaWNoZlRtT01rTFdKZS9YczkvS2xuRTIxNkZMS1VrcTJ0RzVYKzhJSnFZdWQ2RVJ4SjhuVnhJUEh0WUFFcW5OMHZLUVp5UmduRzFNcW14ZUdqQnhSL1JmKzI0ZEMrOS9kT2Vza0U1V2JlZm1WQVN3eW1HN3NkS29ieGQ4YUgwcC9sOUFYZjdJcGU1SGxTM3J1bGJpcVNlam9GTmdYWnJ5bHpSZ0c0Nnc2MTFkQkhzcE5NcXRCSTlwK3dBNEF0UVlOOEh0K0V5NFFyL1FHYWkvZXRQVUhTMUs5VEExYmRLazRBSnNqdVNUZVFRSUN5YkFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQU1WTzVERC9ZV0EzOExDK0F6d2Z3RHFLN0VCcDFpVkhvRVdJajAxUkZacHdXKy80SmNkMUdmeGtHaGJWRldldmI4ZFduNGZXOVBzZEt6RG12MjJ0ZkFTT0RDT2dTaTdveHFoRzZNUnFRaE53QVdIazBjalBaV2N3b1lOL0dMU1JPYVRnOEtOZllxODBUNCtQc0tCT1A2NXpLZ1hPM2ZPUmNldFJUZzFPS2tMcWJDWU9zbmlrRVprcUt1YjFyQUdoMlVsdVNUSWg0eXJCOTRqZ2NIRzdXUzdMMTFKTG1PeXJhTDFNSks0a01pOUR5Q2dJNkJNUjVwRVNsQlZTRzNEU1hMWUkzajkwazBoQlk1WHczYXltdGtWZHgvSDFGK1lEdGZmMStCcXRxZUxseUViVHgxR0w2QVJtdEVTRFVyK3VkcjVTWHF6VHRRbTFhZXJEQVVaK2hNRT08L1g1MDlDZXJ0aWZpY2F0ZT48L1g1MDlEYXRhPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48U3ViamVjdD48TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPm5lb21pX2dsb3ZlckB0cmFudG93YmVkbmFyLmluZm88L05hbWVJRD48U3ViamVjdENvbmZpcm1hdGlvbiBNZXRob2Q9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpjbTpiZWFyZXIiPjxTdWJqZWN0Q29uZmlybWF0aW9uRGF0YSBJblJlc3BvbnNlVG89Il82ZTFlOTQ4ZS1jN2ZiLTQzNjAtYTdhNC1kYjFjYzQwOWNjMjciIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOFQyMTozNjo1NVoiLz48L1N1YmplY3RDb25maXJtYXRpb24-PC9TdWJqZWN0PjxDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAxOC0xMC0yOFQyMTozMTo1NVoiIE5vdE9uT3JBZnRlcj0iMjAxOC0xMC0yOVQwMDozMTo1NVoiPjxBdWRpZW5jZVJlc3RyaWN0aW9uPjxBdWRpZW5jZT5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9BdWRpZW5jZT48L0F1ZGllbmNlUmVzdHJpY3Rpb24-PC9Db25kaXRpb25zPjxBdXRoblN0YXRlbWVudCBBdXRobkluc3RhbnQ9IjIwMTgtMTAtMjhUMjE6MzE6NTVaIiBTZXNzaW9uSW5kZXg9Il81NTEwMjMzYy02YmVkLTRhZWItYTY2OC01MjZlNWQ3Zjg1YzQiPjxBdXRobkNvbnRleHQ-PEF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkPC9BdXRobkNvbnRleHRDbGFzc1JlZj48L0F1dGhuQ29udGV4dD48L0F1dGhuU3RhdGVtZW50PjxBdHRyaWJ1dGVTdGF0ZW1lbnQ-PEF0dHJpYnV0ZSBOYW1lPSJpZCI-PEF0dHJpYnV0ZVZhbHVlPjFhOTZhMjlmLWY1OWUtNGEzOS1hM2QwLTBmMjJkM2RkOGViZjwvQXR0cmlidXRlVmFsdWU-PC9BdHRyaWJ1dGU-PEF0dHJpYnV0ZSBOYW1lPSJlbWFpbCI-PEF0dHJpYnV0ZVZhbHVlPm5lb21pX2dsb3ZlckB0cmFudG93YmVkbmFyLmluZm88L0F0dHJpYnV0ZVZhbHVlPjwvQXR0cmlidXRlPjxBdHRyaWJ1dGUgTmFtZT0iY3JlYXRlZF9hdCI-PEF0dHJpYnV0ZVZhbHVlPjIwMTgtMTAtMjggMjE6MzE6NTUgVVRDPC9BdHRyaWJ1dGVWYWx1ZT48L0F0dHJpYnV0ZT48L0F0dHJpYnV0ZVN0YXRlbWVudD48L0Fzc2VydGlvbj4K"
+  "assertion": "PEFzc2VydGlvbiB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgSUQ9Il9jZDQwNjUzZi1hMzNiLTQ2MzUtYTAwMS0yNDY0NGY2YmRiMDQiIElzc3VlSW5zdGFudD0iMjAxOC0xMC0yOFQyMTo1NTo1NFoiIFZlcnNpb249IjIuMCI-PElzc3Vlcj5odHRwOi8vcHJvb2YudGVzdDo1MDAwL21ldGFkYXRhPC9Jc3N1ZXI-PFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI-PFNpZ25lZEluZm8-PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPjxSZWZlcmVuY2UgVVJJPSIjX2NkNDA2NTNmLWEzM2ItNDYzNS1hMDAxLTI0NjQ0ZjZiZGIwNCI-PFRyYW5zZm9ybXM-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8-PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvVHJhbnNmb3Jtcz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8-PERpZ2VzdFZhbHVlPlFGQzdBWUhzTSs5SGF5cjlMNndSbWJZbTRyV0xBMytlbGo4WTFkcWV5L009PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8-PFNpZ25hdHVyZVZhbHVlPk5CQmhzWVlHY1prbWo4SmNGTi92ZDNDWEtwb1ZGLzRVeHlvamg5L0IzVW1aQ1d4WEdSUVVwazk0Q2F0Sjl6RXQzMlNZU3ZTWnQvbDIwb015YWcvOTd4QllNYXdjd3RDYUZXa2pRd2plamp0cTU4K0p3eGtXNlRJV2NrQTRGTmRDaGZzaGFzNE5aelAveHBGVkcxS3k2dVYyZkd5M0ZrRDVYa0xYOVlNb2FnSkM3bEdacXB6KzZkNGdqeVJOdlFQU2hxZC9PTUZxV3Vnek9QU1BkMkxXd1RhU3VGa2IraFJxck5jbnlzeHZRQWgxZVZ4VGIySnVTbU1VTHBQL1hRcUhiQnpwZ1F5bXZkSGwvd3dRekVxVTIrUVpiRytoMGVhT3Nyb2t1MUorOFYwcXBGMW9aWUJpaW50VkZNMllmZ0Rwb0w3QWJtSit4ZHIzb3RHcjkyM3A0UT09PC9TaWduYXR1cmVWYWx1ZT48S2V5SW5mbz48WDUwOURhdGE-PFg1MDlDZXJ0aWZpY2F0ZT5NSUlETnpDQ0FoK2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQURCZk1Rc3dDUVlEVlFRR0V3SkRRVEVMTUFrR0ExVUVDQXdDUVVJeEVEQU9CZ05WQkFjTUIwTmhiR2RoY25reER6QU5CZ05WQkFvTUJsaHRiRXRwZERFUE1BMEdBMVVFQ3d3R1dHMXNTMmwwTVE4d0RRWURWUVFEREFaWWJXeExhWFF3SGhjTk1UZ3hNREk0TWpFMU5UVXhXaGNOTVRneE1USTNNakUxTlRVeFdqQmZNUXN3Q1FZRFZRUUdFd0pEUVRFTE1Ba0dBMVVFQ0F3Q1FVSXhFREFPQmdOVkJBY01CME5oYkdkaGNua3hEekFOQmdOVkJBb01CbGh0YkV0cGRERVBNQTBHQTFVRUN3d0dXRzFzUzJsME1ROHdEUVlEVlFRRERBWlliV3hMYVhRd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUMzUUpjWkFNN25DUjlQWHV0d3R5cXNvOVI5RW1rY003K1dzYzFMU3l2ZkY2Nytmcm5iY3VURE1VbUR0SFNqMkJsUmZrSzVJZ3IvL2RYY1dTVlhPSVJWdkxhdFBydVh5ZW5QVy9hcFlrQm5ZVm1YSWxZb21qSy9od1p4T1RXSHBBV2praEM0MHE0eFVjOHVoNTYrcFdmdjcxNFcxbzBkalFsZHVlRmxnWUF0dDc0SUNoM0k0Zll4aXpyQmZTSEMydVNWU0FMZlhwMUY5KzAvQVJWUm93cGljQ2YrcnJYYjN3MUxBN1Q3Qk9nTjZYVStadm54NFlmQStGei9CTVNlZ3E3cTA5eHhpTlRiNkRGZ3I2Y0pnL05IZHZNdGlwcUFzbWk1b0w2T2RXeUZqTHQvUklvallJRFlzaGtSbFdTMTlWNEpYNTlEOFc4LzNSY1YvK3JhRFFrakFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUZhNnRweXM1ZkRPUDZRMkdjWmoreFVrd1dJUVNQMVplelErMm8wSlJvY2k1WU40RWtBUFlZMFliS0xKWGNnalBYR3ZOOXk3WmpzUy9rL1BLU1VidElDdUdndS9IZ2dLL25IS0toR2ZxalpQUFNHcnNsdForV3VUVml0ZnhHaTllMjVaTFRSU0pOZEF4V2ZBVzJPVFBiL01UYStqQzgxTjVuMzU4Q2QrdmFLZ1lDYktyRUYrRW1TMmdYTXlYQmFRUWNuK0VWNC9oV3lQTUI3SHZpaXpYenQrdm5kUittdVJWdW5ndUwxdlZFQTJ0MEhmSTc2R2IvT0czcmRUZFkxMnJERkhuTDRZSFNiL2JxTVBNZGowVXBGNzlaUVBEYXRlK3laSlRuSlFUVnpOU213QTNUZGxiRnhJcEpFWGdpeGdxSTJSK3R4azk5K01nT2RxTmhNZDNYMD08L1g1MDlDZXJ0aWZpY2F0ZT48L1g1MDlEYXRhPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48U3ViamVjdD48TmFtZUlEIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQiPmplYW5lLmxlZ3Jvc0BlbW1lcmljaC51czwvTmFtZUlEPjxTdWJqZWN0Q29uZmlybWF0aW9uIE1ldGhvZD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmNtOmJlYXJlciI-PFN1YmplY3RDb25maXJtYXRpb25EYXRhIEluUmVzcG9uc2VUbz0iXzhmMjgyYzNiLTBmZmYtNDIyYi05ZmI3LWI2MGI5YTRhMTM4MCIgTm90T25PckFmdGVyPSIyMDE4LTEwLTI4VDIyOjAwOjU0WiIvPjwvU3ViamVjdENvbmZpcm1hdGlvbj48L1N1YmplY3Q-PENvbmRpdGlvbnMgTm90QmVmb3JlPSIyMDE4LTEwLTI4VDIxOjU1OjU0WiIgTm90T25PckFmdGVyPSIyMDE4LTEwLTI5VDAwOjU1OjU0WiI-PEF1ZGllbmNlUmVzdHJpY3Rpb24-PEF1ZGllbmNlPmh0dHA6Ly9wcm9vZi50ZXN0OjUwMDAvbWV0YWRhdGE8L0F1ZGllbmNlPjwvQXVkaWVuY2VSZXN0cmljdGlvbj48L0NvbmRpdGlvbnM-PEF1dGhuU3RhdGVtZW50IEF1dGhuSW5zdGFudD0iMjAxOC0xMC0yOFQyMTo1NTo1NFoiIFNlc3Npb25JbmRleD0iX2NkNDA2NTNmLWEzM2ItNDYzNS1hMDAxLTI0NjQ0ZjZiZGIwNCI-PEF1dGhuQ29udGV4dD48QXV0aG5Db250ZXh0Q2xhc3NSZWY-dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFjOmNsYXNzZXM6UGFzc3dvcmQ8L0F1dGhuQ29udGV4dENsYXNzUmVmPjwvQXV0aG5Db250ZXh0PjwvQXV0aG5TdGF0ZW1lbnQ-PEF0dHJpYnV0ZVN0YXRlbWVudD48QXR0cmlidXRlIE5hbWU9ImlkIj48QXR0cmlidXRlVmFsdWU-MWZiZjI5ODQtMmQwYi00MmUzLThkYjUtYTVjOWUxNzZhYWJiPC9BdHRyaWJ1dGVWYWx1ZT48L0F0dHJpYnV0ZT48QXR0cmlidXRlIE5hbWU9ImVtYWlsIj48QXR0cmlidXRlVmFsdWU-amVhbmUubGVncm9zQGVtbWVyaWNoLnVzPC9BdHRyaWJ1dGVWYWx1ZT48L0F0dHJpYnV0ZT48QXR0cmlidXRlIE5hbWU9ImNyZWF0ZWRfYXQiPjxBdHRyaWJ1dGVWYWx1ZT4yMDE4LTEwLTI4IDIxOjU1OjU0IFVUQzwvQXR0cmlidXRlVmFsdWU-PC9BdHRyaWJ1dGU-PC9BdHRyaWJ1dGVTdGF0ZW1lbnQ-PC9Bc3NlcnRpb24-Cg=="
 }
 ```
 
@@ -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=393904e35f629c720dfda750ba627569; path=/; HttpOnly
-X-Request-Id: df3be698-a992-40cc-b95e-b7291462313a
+Set-Cookie: _proof=55f31f0ad9af5c7d103e9ceab3a709c1; path=/; HttpOnly
+X-Request-Id: b59f6e51-56a1-4e2b-b48b-66681ea6fc7f
 Transfer-Encoding: chunked
 ```
 
doc/_posts/2018-10-28-oauth-dynamic-client-registration.markdown
@@ -0,0 +1,26 @@
+---
+layout: post
+title:  "OAuth 2.0 - Dynamic Client Registration"
+date:   2018-10-28 14:00:00 -0700
+permalink: /oauth/client-registration.html
+categories: oauth
+---
+
+The Dynamic Client Registration endpoint adheres to [RFC-7591](https://tools.ietf.org/html/rfc7591).
+
+```text
+        +--------(A)- Initial Access Token (OPTIONAL)
+        |
+        |   +----(B)- Software Statement (OPTIONAL)
+        |   |
+        v   v
+    +-----------+                                      +---------------+
+    |           |--(C)- Client Registration Request -->|    Client     |
+    | Client or |                                      | Registration  |
+    | Developer |<-(D)- Client Information Response ---|   Endpoint    |
+    |           |        or Client Error Response      +---------------+
+    +-----------+
+```
+[Section 1.3](https://tools.ietf.org/html/rfc7591#section-1.3)
+
+{% include oauth-dynamic-client-registration.html %}
spec/documentation.rb
@@ -89,4 +89,18 @@ RSpec.describe "documentation" do
       expect(response.code).to eql('200')
     end
   end
+
+  specify do
+    body = {
+      redirect_uris: [generate(:uri), generate(:uri)],
+      client_name: FFaker::Name.name,
+      token_endpoint_auth_method: :client_secret_basic,
+      logo_uri: generate(:uri),
+      jwks_uri: generate(:uri),
+    }
+    VCR.use_cassette("oauth-dynamic-client-registration") do
+      response = hippie.post("#{scheme}://#{host}/oauth/clients", body: body)
+      expect(response.code).to eql('201')
+    end
+  end
 end