< Return to Summary | File Generated: Thu Apr 17 2025 12:24:00 GMT+0000 (Coordinated Universal Time)
Booking Flow:
Opportunity Type:
Feature: Authentication / Booking Partner OpenID Authentication for Multiple Seller Systems (Implemented)
Test: Authorization persists when not requesting offline access
When authorisation is requested without offline access and a user has already given permission, consent must not be required.
npm start -- --runInBand test/features/authentication/booking-partner-openid-authentication-for-multiple-sellers/implemented/authorization-persisted-test.js
The OpenActive Reference Implementation test result for this test can be used as a reference to help with debugging.
✅ 9 passed with 0 failures, 0 warnings and 0 suggestions
The test suite is using the credentials configured by bookingPartnersForSpecificTests.authorizationPersisted.authentication.clientCredentials for this test:
clientid_801secretGET https://localhost:5003/.well-known/openid-configuration
"application/json""gzip, deflate, br""localhost:5003"Response status code: 200.
{
"issuer": "https://localhost:5003",
"jwks_uri": "https://localhost:5003/.well-known/openid-configuration/jwks",
"authorization_endpoint": "https://localhost:5003/connect/authorize",
"token_endpoint": "https://localhost:5003/connect/token",
"userinfo_endpoint": "https://localhost:5003/connect/userinfo",
"end_session_endpoint": "https://localhost:5003/connect/endsession",
"check_session_iframe": "https://localhost:5003/connect/checksession",
"revocation_endpoint": "https://localhost:5003/connect/revocation",
"introspection_endpoint": "https://localhost:5003/connect/introspect",
"device_authorization_endpoint": "https://localhost:5003/connect/deviceauthorization",
"frontchannel_logout_supported": true,
"frontchannel_logout_session_supported": true,
"backchannel_logout_supported": true,
"backchannel_logout_session_supported": true,
"scopes_supported": [
"openid",
"openactive-identity",
"openactive-openbooking",
"openactive-ordersfeed",
"offline_access"
],
"claims_supported": [
"sub",
"https://openactive.io/sellerId",
"https://openactive.io/sellerName",
"https://openactive.io/sellerUrl",
"https://openactive.io/sellerLogo",
"https://openactive.io/bookingServiceName",
"https://openactive.io/bookingServiceUrl",
"name",
"https://openactive.io/clientId"
],
"grant_types_supported": [
"authorization_code",
"client_credentials",
"refresh_token",
"implicit",
"urn:ietf:params:oauth:grant-type:device_code"
],
"response_types_supported": [
"code",
"token",
"id_token",
"id_token token",
"code id_token",
"code token",
"code id_token token"
],
"response_modes_supported": [
"form_post",
"query",
"fragment"
],
"token_endpoint_auth_methods_supported": [
"client_secret_basic",
"client_secret_post"
],
"id_token_signing_alg_values_supported": [
"RS256"
],
"subject_types_supported": [
"public"
],
"code_challenge_methods_supported": [
"plain",
"S256"
],
"request_parameter_supported": true,
"registration_endpoint": "https://localhost:5003/connect/register"
}
POST http://localhost:3000/browser-automation-for-auth
"application/json, text/plain, */*""application/json;charset=utf-8"349"localhost:3000"{
"headless": true,
"offlineAccess": true,
"username": "test1",
"password": "test1",
"authorizationUrl": "https://localhost:5003/connect/authorize?client_id=clientid_801&scope=openid%20openactive-identity&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcb&code_challenge=nK-mdA-hauUa8r2VW_muvaj38HhRW8OgN4aKB8SC34s&code_challenge_method=S256"
}
"https://localhost:5003/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3Dclientid_801%26scope%3Dopenid%2520openactive-identity%26response_type%3Dcode%26redirect_uri%3Dhttp%253A%252F%252Flocalhost%253A3000%252Fcb%26code_challenge%3DnK-mdA-hauUa8r2VW_muvaj38HhRW8OgN4aKB8SC34s%26code_challenge_method%3DS256"
"https://localhost:5003/consent?returnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3Dclientid_801%26scope%3Dopenid%2520openactive-identity%26response_type%3Dcode%26redirect_uri%3Dhttp%253A%252F%252Flocalhost%253A3000%252Fcb%26code_challenge%3DnK-mdA-hauUa8r2VW_muvaj38HhRW8OgN4aKB8SC34s%26code_challenge_method%3DS256"
"/cb?code=FFE06783392EC0A7D94F67D5BFC992198B58793500F092E0855C10F33CC1E0AD&scope=openid%20openactive-identity&session_state=2sdzUk8tqidBF9MnGzVUjwubWR-qVretweZrutQtPzk.FC8A76E9C244BAD995D42EEF40E8B839"
POST https://localhost:5003/connect/token
"Basic Y2xpZW50aWRfODAxOnNlY3JldA==""application/json""application/x-www-form-urlencoded""205""gzip, deflate, br""localhost:5003""grant_type=authorization_code&code=FFE06783392EC0A7D94F67D5BFC992198B58793500F092E0855C10F33CC1E0AD&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcb&code_verifier=g43R_Zn9rNUgx1nCV3S_Rg12rC6kHTjZEHiwnKymI8k"
Response status code: 200.
{
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IkIwNEY3QjkxREUzQjk0NzhDNjE4MzNGQjI0QUE1Q0RCIiwidHlwIjoiSldUIn0.eyJuYmYiOjE3NDQ4OTI2NDMsImV4cCI6MTc0NDg5Mjk0MywiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMyIsImF1ZCI6ImNsaWVudGlkXzgwMSIsImlhdCI6MTc0NDg5MjY0MywiYXRfaGFzaCI6ImNHbnNScmtnRGNneHdfS29LS2dNSmciLCJzaWQiOiI2OUE5OERFNTYzNEQ2NTY5MkFGMDA3NDA4QUM2RkU4OCIsInN1YiI6IjEwMCIsImF1dGhfdGltZSI6MTc0NDg5MjY0MSwiaWRwIjoibG9jYWwiLCJodHRwczovL29wZW5hY3RpdmUuaW8vc2VsbGVyTmFtZSI6IkFjbWUgRml0bmVzcyBMdGQiLCJodHRwczovL29wZW5hY3RpdmUuaW8vc2VsbGVySWQiOiJodHRwczovL2xvY2FsaG9zdDo1MDAxL2FwaS9pZGVudGlmaWVycy9zZWxsZXJzLzEiLCJodHRwczovL29wZW5hY3RpdmUuaW8vc2VsbGVyVXJsIjoiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20iLCJodHRwczovL29wZW5hY3RpdmUuaW8vc2VsbGVyTG9nbyI6Imh0dHBzOi8vcGxhY2VraXR0ZW4uY29tLzY0MC8zNjAiLCJhbXIiOlsicHdkIl19.kJm0U7MmnXfe1EEtsVgrXGNifRlPpsZ1sw-V5dVKlDx_sbm5Tu7yZPWKYw-AfWSCGVZk4E0Nv2Wl6s83ccmihPBLjDEX9J2ncdLqITrf9PxNUfLjNCCLT8wdtrFoj2Ywoby70ltGNuce9m99gz_sWOQ6-4HzvTvFJXyCT6YQKMPz4Krv_40i0AwwrZqLBbG0BrMr9EmMgwE6XDF00SQRsG28t_NPmiuaQxSNadQlGkuP6pZtZ1_iRo6R6SilEgHTt_BRBxNwZQSkwAA88pUpM-w-er89XsJ1ckxWr34v71c7GpQeAf-YkdUAtDj8qfRTf3WIH1lXbfYtmDLd_EY3zw",
"access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IkIwNEY3QjkxREUzQjk0NzhDNjE4MzNGQjI0QUE1Q0RCIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE3NDQ4OTI2NDMsImV4cCI6MTc0NDg5NjI0MywiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMyIsImNsaWVudF9pZCI6ImNsaWVudGlkXzgwMSIsImh0dHBzOi8vb3BlbmFjdGl2ZS5pby9jbGllbnRJZCI6ImNsaWVudGlkXzgwMSIsInN1YiI6IjEwMCIsImF1dGhfdGltZSI6MTc0NDg5MjY0MSwiaWRwIjoibG9jYWwiLCJqdGkiOiI3RjQ3MjBFREEzMTI5QjNBN0MwNzZFQzY4RDlBQkU0RiIsInNpZCI6IjY5QTk4REU1NjM0RDY1NjkyQUYwMDc0MDhBQzZGRTg4IiwiaWF0IjoxNzQ0ODkyNjQzLCJzY29wZSI6WyJvcGVuaWQiLCJvcGVuYWN0aXZlLWlkZW50aXR5Il0sImFtciI6WyJwd2QiXX0.c501Pgy_IUF53Y2soHUOwYl3cznHag2XHD5KRU1_MR-lLlfAFZ9TrQ_JJassF5u0j4LRpYE3BeplrEKo5Q8q58NazU6_x41yN54n4YQ3PUMQvJ80MpDME_oJuESHJdeVTb05gKVDQTlkitdkKFlMBwcqSLvK0HaI6e7kOKjioWSlfzWgadtggBuRjz-u75O8A165eh4OauvSY3kduwhBtWdXg2C2q1u_7CsLh_q7hX4WlUeEOPeGXeLD7HDj5EyxXNuwiJB7mKiyX7cyQEBSqdO5pvGjh2y9Hkfe1Bdf346Y0A1e-DVG6pw3NTCqvalKz-Kqyad1w4aALnr6qC8TqQ",
"expires_in": 3600,
"token_type": "Bearer",
"scope": "openid openactive-identity"
}
GET https://localhost:5003/.well-known/openid-configuration/jwks
"application/json""gzip, deflate, br""localhost:5003"Response status code: 200.
{
"keys": [
{
"kty": "RSA",
"use": "sig",
"kid": "B04F7B91DE3B9478C61833FB24AA5CDB",
"e": "AQAB",
"n": "yZO68vCGrvfBQ5R1z0DVCRAADOWeF3aLlhOaz1Je1SnmohmmlO-1F1hkRM_4MJtR5aECMxMz-MUW1nBCPmUrH0h_rrdCdDdlk8vTHki0ixK-gO73W2ZscOCZ6L2fZ2Oqz0_I840cnSCv55zpiOk9oGJL9TEsLAWYAIyQheaqZO3BkqImuBFmaLVTckvaZeONjHDQa01rxEjRQByir6oYSZPJy54XuRQJaPuCVNeOW8r0R9rKUQf9nl7tnVvhCsU3q1-UPrs8ZW_kaYXuYQJJMk392jX6XNm6czehIYM-O8Z5eGFdR3WW7IAWYEmqTCxrCRuuKU-EEcKOwksx8gBPgQ",
"alg": "RS256"
}
]
}
id_token claims:
{
"nbf": 1744892643,
"exp": 1744892943,
"iss": "https://localhost:5003",
"aud": "clientid_801",
"iat": 1744892643,
"at_hash": "cGnsRrkgDcgxw_KoKKgMJg",
"sid": "69A98DE5634D65692AF007408AC6FE88",
"sub": "100",
"auth_time": 1744892641,
"idp": "local",
"https://openactive.io/sellerName": "Acme Fitness Ltd",
"https://openactive.io/sellerId": "https://localhost:5001/api/identifiers/sellers/1",
"https://openactive.io/sellerUrl": "https://www.example.com",
"https://openactive.io/sellerLogo": "https://placekitten.com/640/360",
"amr": [
"pwd"
]
}
POST http://localhost:3000/browser-automation-for-auth
"application/json, text/plain, */*""application/json;charset=utf-8"349"localhost:3000"{
"headless": true,
"offlineAccess": true,
"username": "test1",
"password": "test1",
"authorizationUrl": "https://localhost:5003/connect/authorize?client_id=clientid_801&scope=openid%20openactive-identity&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcb&code_challenge=YwdSYLi5WqWKxlgL2tDsNh9uFD946tuyv3aGH213jD4&code_challenge_method=S256"
}
"https://localhost:5003/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3Dclientid_801%26scope%3Dopenid%2520openactive-identity%26response_type%3Dcode%26redirect_uri%3Dhttp%253A%252F%252Flocalhost%253A3000%252Fcb%26code_challenge%3DYwdSYLi5WqWKxlgL2tDsNh9uFD946tuyv3aGH213jD4%26code_challenge_method%3DS256"
"/cb?code=6C58CA358D6EAE4B5D683ACA07323E4E87ED1809BE5EDCCA5022D1EA9D89D4A2&scope=openid%20openactive-identity&session_state=LPJFcVF6lGzfL9rZbLUhvkv3zXJhbS3qQriz0t0XweA.0151FB606412FD7DF03DB2DB32DFFBFF"
POST https://localhost:5003/connect/token
"Basic Y2xpZW50aWRfODAxOnNlY3JldA==""application/json""application/x-www-form-urlencoded""205""gzip, deflate, br""localhost:5003""grant_type=authorization_code&code=6C58CA358D6EAE4B5D683ACA07323E4E87ED1809BE5EDCCA5022D1EA9D89D4A2&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcb&code_verifier=NTNJ7a6WEkrtGVz-aMqeUyituo_0tS96AIU8yJAljBM"
Response status code: 200.
{
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IkIwNEY3QjkxREUzQjk0NzhDNjE4MzNGQjI0QUE1Q0RCIiwidHlwIjoiSldUIn0.eyJuYmYiOjE3NDQ4OTI2NDQsImV4cCI6MTc0NDg5Mjk0NCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMyIsImF1ZCI6ImNsaWVudGlkXzgwMSIsImlhdCI6MTc0NDg5MjY0NCwiYXRfaGFzaCI6IjJXRDRfWTRtUXRkWEV1RmVFSnFYVlEiLCJzaWQiOiIyRkRCRTY2QkZENzhEMDIyMDJCNTJBREM3RkZBNTU1MCIsInN1YiI6IjEwMCIsImF1dGhfdGltZSI6MTc0NDg5MjY0NCwiaWRwIjoibG9jYWwiLCJodHRwczovL29wZW5hY3RpdmUuaW8vc2VsbGVyTmFtZSI6IkFjbWUgRml0bmVzcyBMdGQiLCJodHRwczovL29wZW5hY3RpdmUuaW8vc2VsbGVySWQiOiJodHRwczovL2xvY2FsaG9zdDo1MDAxL2FwaS9pZGVudGlmaWVycy9zZWxsZXJzLzEiLCJodHRwczovL29wZW5hY3RpdmUuaW8vc2VsbGVyVXJsIjoiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20iLCJodHRwczovL29wZW5hY3RpdmUuaW8vc2VsbGVyTG9nbyI6Imh0dHBzOi8vcGxhY2VraXR0ZW4uY29tLzY0MC8zNjAiLCJhbXIiOlsicHdkIl19.TycxsaGMCLh5ADEBggkQ-7HG7ZZ8FJ56rXF8uu048s_GiMN_QO3s9rEN2CdnNRP25_H0cCrQZLfp67_hCPdoyuMFyackcNaF66h_1l4J9CMdHL_lJsmbFh-PCQ13QchOE2OtMQHLJZ5wYCPOKxx8O3wqxouiazzOZPEdd8qhzY2gtrGqjjj10MuTvYH3xR9Hw5dSxnRgYlDwbt_wrFoFJLN80alLeVZAeeHACXxw4MZ2OdpeVmqLdqM0F6P37J-tiUZosyLAHGJVIO2BmzUD3zs3KWBZ47QTcuKCrHXfESggKXDcGHOV5uLZkeXi7J7xPHe-kGTeW2vIiOX8A73qUQ",
"access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IkIwNEY3QjkxREUzQjk0NzhDNjE4MzNGQjI0QUE1Q0RCIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE3NDQ4OTI2NDQsImV4cCI6MTc0NDg5NjI0NCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMyIsImNsaWVudF9pZCI6ImNsaWVudGlkXzgwMSIsImh0dHBzOi8vb3BlbmFjdGl2ZS5pby9jbGllbnRJZCI6ImNsaWVudGlkXzgwMSIsInN1YiI6IjEwMCIsImF1dGhfdGltZSI6MTc0NDg5MjY0NCwiaWRwIjoibG9jYWwiLCJqdGkiOiJDMEE4NjVFNDk3QzA5QzkwRTM1ODNGNDkxRkVCQjUwRSIsInNpZCI6IjJGREJFNjZCRkQ3OEQwMjIwMkI1MkFEQzdGRkE1NTUwIiwiaWF0IjoxNzQ0ODkyNjQ0LCJzY29wZSI6WyJvcGVuaWQiLCJvcGVuYWN0aXZlLWlkZW50aXR5Il0sImFtciI6WyJwd2QiXX0.qA9lNYXHvuQo544nIvgwcpPr865EU72bHP8XYISmfj4_Dotc6SuoXIZUIOKrHG09Dr2u2ErOYqggWOympU5JwyWRXDezmIuqBWD1qp1xu9lfl6oqMLMpohqm2FEmYbcRUumQsEN1AQxmnoeYLO9K59eta1jKa4la3VoO925SppjiiYxAt7Zxv7w0meo7IQuya0xVA9FYrzcuARl37kb_uVKaEWZD5DZJln1IOCVTAjPkDqvvt5D-5w6595lEirgGVWR5geo0EvPnLZqaM1bhnyw-OXuoV-R28olFSSwMktHCVhuCS7lFrMJlgGi5HH05aGICz1N8-mGtGZVbiUj0Nw",
"expires_in": 3600,
"token_type": "Bearer",
"scope": "openid openactive-identity"
}
id_token claims:
{
"nbf": 1744892644,
"exp": 1744892944,
"iss": "https://localhost:5003",
"aud": "clientid_801",
"iat": 1744892644,
"at_hash": "2WD4_Y4mQtdXEuFeEJqXVQ",
"sid": "2FDBE66BFD78D02202B52ADC7FFA5550",
"sub": "100",
"auth_time": 1744892644,
"idp": "local",
"https://openactive.io/sellerName": "Acme Fitness Ltd",
"https://openactive.io/sellerId": "https://localhost:5001/api/identifiers/sellers/1",
"https://openactive.io/sellerUrl": "https://www.example.com",
"https://openactive.io/sellerLogo": "https://placekitten.com/640/360",
"amr": [
"pwd"
]
}
https://openactive.io/sellerId claim in id_tokenid_token as defined in specificationhttps://openactive.io/sellerId claim in id_tokenid_token as defined in specification