{
	"info": {
		"_postman_id": "110ff5ad-6afe-4534-a5b5-f9f7c7b8b96c",
		"name": "ForgeRock OpenID Connect Backchannel Logout Collection",
		"description": "This collection contains the OpenID Connect Backchannel Logout flows that AM supports, and provides the ability for you to try them out. \n\nBefore running any of the queries in this collection, create a Mock Server in Postman for this collection. Copy the URL of your new Mock Server into the back_channel_logout_url variable under the Variables tab, see the [Postman Documentation on setting up mock servers](https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/setting-up-mock/). You will be able to monitor requests sent to this mock server by AM to see the logout_token.\n\nOnce this mock server has been created, update any other variables provided in the collection that do not match your setup.",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "Prerequisites",
			"item": [
				{
					"name": "Step 1: Log in as an Administrator",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"var jsonData = JSON.parse(responseBody);",
									"",
									"if(pm.response.code == 200)",
									"{",
									"    pm.collectionVariables.set(\"adminSSOToken\", jsonData.tokenId);",
									"}",
									"",
									"",
									"// Tests",
									"",
									"pm.test(\"Status code is 200.\", () => {",
									"  pm.expect(pm.response.code).to.eql(200);",
									"});",
									"",
									"pm.test(\"Response contains tokenId\", function () {",
									"    pm.expect(jsonData).to.have.any.keys('tokenId');",
									"});",
									"",
									""
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "prerequest",
							"script": {
								"exec": [
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"protocolProfileBehavior": {
						"disableCookies": true
					},
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept-API-Version",
								"value": "resource=2.1"
							},
							{
								"key": "X-OpenAM-Username",
								"value": "{{admin_username}}",
								"type": "text"
							},
							{
								"key": "X-OpenAM-Password",
								"value": "{{admin_password}}",
								"type": "text"
							}
						],
						"url": {
							"raw": "{{URL_base}}/json/realms/root/authenticate",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"json",
								"realms",
								"root",
								"authenticate"
							]
						},
						"description": "Log in to AM as an administrative user to create the objects and identities in AM that the collection requires."
					},
					"response": []
				},
				{
					"name": "Step 2: Create a SubRealm",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"var jsonData = JSON.parse(responseBody);",
									"",
									"// TESTS",
									"",
									"pm.test(\"Status code is 201.\", () => {",
									"  pm.expect(pm.response.code).to.eql(201);",
									"});",
									"",
									"pm.test(\"Response contains an ID\", function () {",
									"    pm.expect(jsonData).to.have.any.keys('_id');",
									"});",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "cookie",
								"value": "iPlanetDirectoryPro={{adminSSOToken}}"
							},
							{
								"key": "Accept-API-Version",
								"value": "resource=1.0"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"name\": \"{{sub_realm}}\",\n    \"active\": true,\n    \"parentPath\": \"/\",\n    \"aliases\": [ \"backchannel-logout.example.com\" ]\n}"
						},
						"url": {
							"raw": "{{URL_base}}/json/global-config/realms",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"json",
								"global-config",
								"realms"
							]
						},
						"description": "Create a subrealm, under which everything created in this collection will be stored."
					},
					"response": []
				},
				{
					"name": "Step 3: Create an OAuth 2.0 Provider Service",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"// Tests",
									"",
									"pm.test(\"Status code is 201.\", () => {",
									"  pm.expect(pm.response.code).to.eql(201);",
									"});",
									"",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"protocolProfileBehavior": {
						"disableCookies": false
					},
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Cookie",
								"value": "iPlanetDirectoryPro={{adminSSOToken}}",
								"type": "text"
							},
							{
								"key": "Content-Type",
								"value": "application/json",
								"type": "text"
							},
							{
								"key": "Accept-API-Version",
								"value": "resource=1.0",
								"type": "text"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n   \"advancedOAuth2Config\":{\n      \"responseTypeClasses\":[\n         \"code|org.forgerock.oauth2.core.AuthorizationCodeResponseTypeHandler\",\n         \"device_code|org.forgerock.oauth2.core.TokenResponseTypeHandler\",\n         \"token|org.forgerock.oauth2.core.TokenResponseTypeHandler\",\n         \"id_token|org.forgerock.openidconnect.IdTokenResponseTypeHandler\"\n      ],\n      \"grantTypes\":[\n         \"implicit\",\n         \"refresh_token\",\n         \"urn:ietf:params:oauth:grant-type:saml2-bearer\",\n         \"password\",\n         \"client_credentials\",\n         \"urn:ietf:params:oauth:grant-type:device_code\",\n         \"authorization_code\",\n         \"urn:openid:params:grant-type:ciba\",\n         \"urn:ietf:params:oauth:grant-type:uma-ticket\",\n         \"urn:ietf:params:oauth:grant-type:jwt-bearer\",\n         \"urn:ietf:params:oauth:grant-type:token-exchange\"\n      ]\n   }\n}"
						},
						"url": {
							"raw": "{{URL_base}}/json/realms/{{sub_realm}}/realm-config/services/oauth-oidc?_action=create",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"json",
								"realms",
								"{{sub_realm}}",
								"realm-config",
								"services",
								"oauth-oidc"
							],
							"query": [
								{
									"key": "_action",
									"value": "create"
								}
							]
						},
						"description": "AM must be configured as an OAuth 2.0 authorization server. It must also be able to issue OpenID Connect ID tokens."
					},
					"response": []
				},
				{
					"name": "Step 4: Create a Demo User",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"// Tests",
									"pm.test(\"Status code is 201.\", () => {",
									"  pm.expect(pm.response.code).to.eql(201);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept-API-Version",
								"value": "protocol=2.1,resource=3.0"
							},
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Cookie",
								"value": "iPlanetDirectoryPro={{adminSSOToken}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"username\": \"{{demo_username}}\",\n    \"userpassword\": \"{{demo_password}}\",\n    \"mail\": \"demo.user@example.com\"\n}"
						},
						"url": {
							"raw": "{{URL_base}}/json/realms/{{sub_realm}}/users/?_action=create",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"json",
								"realms",
								"{{sub_realm}}",
								"users",
								""
							],
							"query": [
								{
									"key": "_action",
									"value": "create"
								}
							]
						},
						"description": "A demonstration user that will be the resource owner/end user."
					},
					"response": []
				},
				{
					"name": "Step 5: Create a Confidential Client",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"// Tests",
									"pm.test(\"Status code is 201.\", () => {",
									"  pm.expect(pm.response.code).to.eql(201);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "PUT",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json",
								"type": "text"
							},
							{
								"key": "X-Requested-With",
								"value": "ForgeRock Collection",
								"type": "text"
							},
							{
								"key": "Cookie",
								"value": "iPlanetDirectoryPro={{adminSSOToken}}",
								"type": "text"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"coreOAuth2ClientConfig\": {  \n    \"userpassword\": \"{{client_secret}}\",\n     \"redirectionUris\": {\n      \"inherited\": false,\n      \"value\": [\n        \"{{redirect_uri}}\"\n      ]\n    },\n    \"scopes\": {\n      \"inherited\": false,\n      \"value\": [\n        \"write\",\n        \"read\",\n        \"share\",\n        \"print\",\n        \"copy\",\n        \"delete\",\n        \"manage\",\n        \"edit\",\n        \"openid\",\n        \"profile\"\n      ]\n    },    \n\t\"backchannel_logout_uri\": {\n\t\t\"inherited\": false,\n\t\t\"value\": \"{{back_channel_logout_uri}}\"\n\t}\n  },\n  \"advancedOAuth2ClientConfig\": {\n    \"grantTypes\": {\n      \"inherited\": false,\n      \"value\": [\n        \"password\",\n        \"authorization_code\",\n        \"implicit\",\n        \"password\",\n        \"client_credentials\",\n        \"refresh_token\",\n        \"urn:ietf:params:oauth:grant-type:device_code\",\n        \"urn:ietf:params:oauth:grant-type:token-exchange\"\n      ]\n    },\n    \"tokenEndpointAuthMethod\": {\n      \"inherited\": false,\n      \"value\":  \"client_secret_post\"\n    }\n  }\n}"
						},
						"url": {
							"raw": "{{URL_base}}/json/realms/{{sub_realm}}/realm-config/agents/OAuth2Client/{{confidential_client_id}}",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"json",
								"realms",
								"{{sub_realm}}",
								"realm-config",
								"agents",
								"OAuth2Client",
								"{{confidential_client_id}}"
							]
						},
						"description": "A confidential client, used in some of the grant flows."
					},
					"response": []
				},
				{
					"name": "Step 6: Log out the Administrator",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"// Tests",
									"",
									"pm.test(\"Status code is 200.\", () => {",
									"  pm.expect(pm.response.code).to.eql(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Cookie",
								"type": "text",
								"value": "iPlanetDirectoryPro={{adminSSOToken}}"
							},
							{
								"key": "Accept-API-Version",
								"type": "text",
								"value": "resource=2.1"
							}
						],
						"url": {
							"raw": "{{URL_base}}/json/realms/{{sub_realm}}/sessions/?_action=logout",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"json",
								"realms",
								"{{sub_realm}}",
								"sessions",
								""
							],
							"query": [
								{
									"key": "_action",
									"value": "logout"
								}
							]
						}
					},
					"response": []
				}
			],
			"description": "Follow these steps to set up the prerequisites needed to run the OIDC Backchannel Logout.",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				},
				{
					"listen": "test",
					"script": {
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				}
			]
		},
		{
			"name": "OpenID Connect Backchannel Logout Flow",
			"item": [
				{
					"name": "Step 1: Log in as the Demo User",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"var jsonData = JSON.parse(responseBody);",
									"",
									"if(pm.response.code == 200 && jsonData.tokenId.length >3)",
									"{",
									"    pm.collectionVariables.set(\"SSOToken\", jsonData.tokenId);",
									"}",
									"",
									"// Tests",
									"",
									"pm.test(\"Status code is 200\", () => {",
									"  pm.expect(pm.response.code).to.eql(200);",
									"});",
									""
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "prerequest",
							"script": {
								"exec": [
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"protocolProfileBehavior": {
						"disableCookies": false,
						"followRedirects": true
					},
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "X-OpenAM-Username",
								"value": "{{demo_username}}"
							},
							{
								"key": "X-OpenAM-Password",
								"value": "{{demo_password}}"
							},
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept-API-Version",
								"value": "resource=2.1"
							}
						],
						"url": {
							"raw": "{{URL_base}}/json/{{sub_realm}}/authenticate",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"json",
								"{{sub_realm}}",
								"authenticate"
							]
						},
						"description": "Log in as the Demo user to obtain a session token for them. This token will be used in the following calls."
					},
					"response": []
				},
				{
					"name": "Step 2: Get Authorization Code",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"var jsonData = pm.response.json();",
									"",
									"if(pm.response.code == 200)",
									"{",
									"    if(jsonData.args.code && jsonData.args.code != \"\") {",
									"        pm.collectionVariables.set(\"authorization_code\", jsonData.args.code);",
									"    }",
									"}",
									"",
									"// TESTS",
									"",
									"pm.test(\"Follow redirects is enabled in Postman (Status code not 302)\", () => {",
									"  // If response was 302, ensure Postman is following redirects.  ",
									"  pm.response.to.not.have.status(302);",
									"});",
									"",
									"pm.test(\"Response from httpbin contained `code` argument\", () => {",
									"    pm.expect(jsonData.args.code).to.be.a(\"string\");",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"protocolProfileBehavior": {
						"followRedirects": true
					},
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Cookie",
								"value": "iPlanetDirectoryPro={{SSOToken}}",
								"type": "text"
							}
						],
						"body": {
							"mode": "urlencoded",
							"urlencoded": [
								{
									"key": "scope",
									"value": "profile openid",
									"type": "text"
								},
								{
									"key": "response_type",
									"value": "code",
									"type": "text"
								},
								{
									"key": "client_id",
									"value": "{{confidential_client_id}}",
									"type": "text"
								},
								{
									"key": "redirect_uri",
									"value": "{{redirect_uri}}",
									"type": "text"
								},
								{
									"key": "decision",
									"value": "allow",
									"description": "Decision that grants access to the authentication code. When using a browser, the user would consent that the client can access their information.",
									"type": "text"
								},
								{
									"key": "csrf",
									"value": "{{SSOToken}}",
									"description": "SSO token of the user, to protect against cross-site request forgery",
									"type": "text"
								},
								{
									"key": "state",
									"value": "abc123",
									"description": "Random string to protect against cross-site request forgery",
									"type": "text"
								},
								{
									"key": "nonce",
									"value": "123abc",
									"description": "Random string to protect against replay attacks",
									"type": "text"
								}
							]
						},
						"url": {
							"raw": "{{URL_base}}/oauth2/{{sub_realm}}/authorize",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"oauth2",
								"{{sub_realm}}",
								"authorize"
							]
						},
						"description": "Get the authorization code by making a call to the authorization server's authorization endpoint, specifying the SSO token of the user.\n"
					},
					"response": []
				},
				{
					"name": "Step 3: Exchange the Authorization Code for an Access Token and an ID token",
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"exec": [
									""
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "test",
							"script": {
								"exec": [
									"var jsonData = JSON.parse(responseBody);",
									"",
									"if (pm.response.code == 200)",
									"{",
									"   pm.collectionVariables.set(\"access_token\", jsonData.access_token);",
									"   pm.collectionVariables.set(\"id_token\", jsonData.id_token);",
									"}",
									"",
									"// Tests",
									"",
									"pm.test(\"Status code is 200\", () => {",
									"  pm.expect(pm.response.code).to.eql(200);",
									"});",
									"",
									"pm.test(\"Response contains access_token\", function () {",
									"    pm.expect(jsonData.access_token).to.be.a(\"string\");",
									"});",
									"",
									"pm.test(\"Response contains id_token\", function () {",
									"     pm.expect(jsonData.id_token).to.be.a(\"string\");",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"name": "Content-Type",
								"value": "application/x-www-form-urlencoded",
								"type": "text"
							}
						],
						"body": {
							"mode": "urlencoded",
							"urlencoded": [
								{
									"key": "grant_type",
									"value": "authorization_code",
									"type": "text"
								},
								{
									"key": "code",
									"value": "{{authorization_code}}",
									"type": "text"
								},
								{
									"key": "client_id",
									"value": "{{confidential_client_id}}",
									"type": "text"
								},
								{
									"key": "client_secret",
									"value": "{{client_secret}}",
									"type": "text"
								},
								{
									"key": "redirect_uri",
									"value": "{{redirect_uri}}",
									"type": "text"
								}
							]
						},
						"url": {
							"raw": "{{URL_base}}/oauth2/{{sub_realm}}/access_token",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"oauth2",
								"{{sub_realm}}",
								"access_token"
							]
						},
						"description": "Make a call to the authorization server to exchange the authorization code for an access token and ID token."
					},
					"response": []
				},
				{
					"name": "Step 4: Get ID Token Information",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"// Tests",
									"",
									"const jsonData = JSON.parse(responseBody);",
									"",
									"pm.test(\"Status code is 200\", () => {",
									"  pm.expect(pm.response.code).to.eql(200);",
									"});",
									"",
									"",
									"pm.test(\"Response contains correct `aud`.\", function () {",
									"    pm.expect(jsonData.aud).to.eql(pm.collectionVariables.get(\"confidential_client_id\"));",
									"});",
									"",
									"",
									""
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [],
						"body": {
							"mode": "urlencoded",
							"urlencoded": [
								{
									"key": "id_token",
									"value": "{{id_token}}",
									"description": "ID token you want the information from",
									"type": "text"
								},
								{
									"key": "client_id",
									"value": "{{confidential_client_id}}",
									"type": "text"
								},
								{
									"key": "client_secret",
									"value": "{{client_secret}}",
									"type": "text"
								}
							]
						},
						"url": {
							"raw": "{{URL_base}}/oauth2/realms/{{sub_realm}}/idtokeninfo",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"oauth2",
								"realms",
								"{{sub_realm}}",
								"idtokeninfo"
							]
						},
						"description": "Retrieve information about the ID token. For example, the user that authorized the token, and the expiry time."
					},
					"response": []
				},
				{
					"name": "Step 5: Log out the Demo User",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"// Tests",
									"",
									"pm.test(\"Status code is 200.\", () => {",
									"  pm.expect(pm.response.code).to.eql(200);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "iPlanetDirectoryPro",
								"type": "text",
								"value": "{{SSOToken}}"
							},
							{
								"key": "Accept-API-Version",
								"type": "text",
								"value": "resource=2.1"
							}
						],
						"url": {
							"raw": "{{URL_base}}/json/realms/{{sub_realm}}/sessions/?_action=logout",
							"host": [
								"{{URL_base}}"
							],
							"path": [
								"json",
								"realms",
								"{{sub_realm}}",
								"sessions",
								""
							],
							"query": [
								{
									"key": "_action",
									"value": "logout"
								}
							]
						},
						"description": "End the Demo user's session triggering a backchannel logout on the registered backchannel logout URL for the confidential client. See the [Postman documentation on Mock servers](https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/setting-up-mock/#viewing-mock-calls) for how to view the request AM has sent to the logout URL. The request body will have a single parameter `logout_token` which is a base 64-encoded signed JWT. It can be decoded by entering the JWT into a base 64 decoder. \n\nThe `logout_token` will contain the claims required by the [OpenID Connect Backchannel Logout specification](https://openid.net/specs/openid-connect-backchannel-1_0.html#LogoutToken) plus `auditTrackingId` which is used to reference this token in the AM audit logs.\n\nNote that if Id Token Encryption is enabled for the client then the `logout_token` JWT will be encrypted in the same way as an ID token and will require decryption prior to decoding."
					},
					"response": []
				}
			],
			"description": "OpenID Connect Flows."
		},
		{
			"name": "Mock Response",
			"item": [
				{
					"name": "Mock Logout Response",
					"request": {
						"method": "POST",
						"header": [],
						"url": {
							"raw": "{{back_channel_logout_uri}}",
							"host": [
								"{{back_channel_logout_uri}}"
							]
						},
						"description": "This is the request and example response that will be used to setup the Postman Mock server response."
					},
					"response": [
						{
							"name": "Mock Logout Response",
							"originalRequest": {
								"method": "POST",
								"header": [],
								"url": {
									"raw": "{{back_channel_logout_uri}}",
									"host": [
										"{{back_channel_logout_uri}}"
									]
								}
							},
							"status": "OK",
							"code": 200,
							"_postman_previewlanguage": "json",
							"header": [
								{
									"key": "Date",
									"value": "Tue, 26 Jan 2021 09:36:26 GMT"
								},
								{
									"key": "Content-Type",
									"value": "application/json; charset=utf-8"
								},
								{
									"key": "Transfer-Encoding",
									"value": "chunked"
								},
								{
									"key": "Connection",
									"value": "keep-alive"
								},
								{
									"key": "Server",
									"value": "nginx"
								},
								{
									"key": "x-srv-trace",
									"value": "v=1;t=8b43284622cb334f"
								},
								{
									"key": "x-srv-span",
									"value": "v=1;s=b5aaff85eaa0c66f"
								},
								{
									"key": "Access-Control-Allow-Origin",
									"value": "*"
								},
								{
									"key": "X-RateLimit-Limit",
									"value": "120"
								},
								{
									"key": "X-RateLimit-Remaining",
									"value": "119"
								},
								{
									"key": "X-RateLimit-Reset",
									"value": "1611653846"
								},
								{
									"key": "ETag",
									"value": "W/\"1b6-CPpS7DdEDKnn24y9Rsn6uz0TA8Y\""
								},
								{
									"key": "Vary",
									"value": "Accept-Encoding"
								},
								{
									"key": "set-cookie",
									"value": "sails.sid=s%3A4_zefF3tDV7eK2R_L1tcjvMG7k2pIzjy.FB9y1YLyxuFNksOjpybGnmIerJKltwCABVwDII6oVxQ; Path=/; HttpOnly"
								},
								{
									"key": "Content-Encoding",
									"value": "gzip"
								}
							],
							"cookie": [],
							"body": "{\n    \"args\": {},\n    \"data\": {},\n    \"files\": {},\n    \"form\": {},\n    \"headers\": {\n        \"x-forwarded-proto\": \"https\",\n        \"x-forwarded-port\": \"443\",\n        \"host\": \"postman-echo.com\",\n        \"x-amzn-trace-id\": \"Root=1-600fe20f-19a2ed183b838c0030d63f13\",\n        \"content-length\": \"0\",\n        \"user-agent\": \"PostmanRuntime/7.26.10\",\n        \"accept\": \"*/*\",\n        \"cache-control\": \"no-cache\",\n        \"postman-token\": \"953bd42c-1b6a-4297-b2cd-fa9ec087b8f2\",\n        \"accept-encoding\": \"gzip, deflate, br\"\n    },\n    \"json\": null,\n    \"url\": \"https://postman-echo.com/post\"\n}"
						}
					]
				}
			]
		}
	],
	"event": [
		{
			"listen": "prerequest",
			"script": {
				"type": "text/javascript",
				"exec": [
					""
				]
			}
		},
		{
			"listen": "test",
			"script": {
				"type": "text/javascript",
				"exec": [
					""
				]
			}
		}
	],
	"variable": [
		{
			"key": "URL_base",
			"value": "https://am.example.com:8443/am"
		},
		{
			"key": "redirect_uri",
			"value": "https://httpbin.org/anything"
		},
		{
			"key": "sub_realm",
			"value": "backchannelSubRealm"
		},
		{
			"key": "admin_username",
			"value": "amadmin"
		},
		{
			"key": "admin_password",
			"value": "forgerock"
		},
		{
			"key": "demo_username",
			"value": "ForgerockDemo"
		},
		{
			"key": "demo_password",
			"value": "5up35tr0nG!"
		},
		{
			"key": "confidential_client_id",
			"value": "backchannelConfidentialClient"
		},
		{
			"key": "client_secret",
			"value": "forgerock"
		},
		{
			"key": "SSOToken",
			"value": ""
		},
		{
			"key": "adminSSOToken",
			"value": ""
		},
		{
			"key": "authorization_code",
			"value": ""
		},
		{
			"key": "access_token",
			"value": ""
		},
		{
			"key": "id_token",
			"value": ""
		},
		{
			"key": "back_channel_logout_uri",
			"value": "https://postman-echo.com/post"
		}
	]
}