solid-server 5.8.8-22f4cfec → 5.8.8-4cf09686

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/common/js/auth-buttons.mjs +20 -20
  2. package/common/js/index-buttons.mjs +31 -30
  3. package/common/js/solid.mjs +11 -11
  4. package/config/defaults.mjs +1 -1
  5. package/config/templates/server/index.html +1 -1
  6. package/coverage/tmp/coverage-2264-1767721071420-0.json +1 -0
  7. package/coverage/tmp/{coverage-2261-1766832635310-0.json → coverage-2265-1767721050068-0.json} +1 -1
  8. package/default-templates/server/index.html +1 -1
  9. package/eslint.config.mjs +102 -0
  10. package/index.mjs +8 -8
  11. package/lib/acl-checker.mjs +1 -3
  12. package/lib/handlers/copy.mjs +0 -2
  13. package/lib/handlers/cors-proxy.mjs +2 -4
  14. package/lib/handlers/get.mjs +12 -8
  15. package/lib/handlers/index.mjs +0 -2
  16. package/lib/handlers/options.mjs +0 -2
  17. package/lib/ldp.mjs +0 -3
  18. package/lib/models/account-manager.mjs +2 -2
  19. package/lib/models/oidc-manager.mjs +0 -1
  20. package/lib/resource-mapper.mjs +1 -3
  21. package/lib/utils.mjs +0 -2
  22. package/lib/webid/lib/get.mjs +0 -1
  23. package/lib/webid/tls/index.mjs +0 -1
  24. package/package.json +28 -27
  25. package/solid-server-5.8.8.tgz +0 -0
  26. package/test/index.mjs +0 -1
  27. package/test/integration/account-manager-test.mjs +2 -3
  28. package/test/integration/account-template-test.mjs +0 -1
  29. package/test/integration/acl-oidc-test.mjs +0 -1
  30. package/test/integration/authentication-oidc-test.mjs +13 -8
  31. package/test/integration/authentication-oidc-with-strict-origins-turned-off-test.mjs +14 -9
  32. package/test/integration/capability-discovery-test.mjs +0 -1
  33. package/test/integration/oidc-manager-test.mjs +95 -2
  34. package/test/integration/params-test.mjs +5 -5
  35. package/test/integration/quota-test.mjs +0 -1
  36. package/test/integration/www-account-creation-oidc-test.mjs +0 -1
  37. package/test/resources/accounts/db/oidc/op/clients/{_key_5319f8e8e4ea3214c2e92b252520d355.json → _key_69eaaa0e44e3f95d54a021c5b41e6d72.json} +1 -1
  38. package/test/resources/accounts/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A3457.json +1 -1
  39. package/test/resources/accounts-scenario/alice/db/oidc/op/clients/{_key_9c0fd8442675a1afbe5115b9ae300c65.json → _key_c07d7590e034645477f72d1d3000b04e.json} +1 -1
  40. package/test/resources/accounts-scenario/alice/db/oidc/op/provider.json +538 -313
  41. package/test/resources/accounts-scenario/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7000.json +1 -1
  42. package/test/resources/accounts-scenario/bob/db/oidc/op/clients/{_key_f15f340b6dc71b68d20eca0d7e87a972.json → _key_a10918196ba5adab47f1cf77ec7fa4a6.json} +1 -1
  43. package/test/resources/accounts-scenario/bob/db/oidc/op/provider.json +538 -313
  44. package/test/resources/accounts-scenario/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7001.json +1 -1
  45. package/test/resources/accounts-scenario/charlie/db/oidc/op/clients/{_key_7c634dfe325475cc8750e19c72acf6d9.json → _key_e5c13302f9989c257c6967238e7ae2df.json} +1 -1
  46. package/test/resources/accounts-scenario/charlie/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A5002.json +1 -1
  47. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/clients/{_key_3f1cecaefd21253767f6e047bd9b572f.json → _key_e262eb5992e08f1284fbda4d22e0f363.json} +1 -1
  48. package/test/resources/accounts-strict-origin-off/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7010.json +1 -1
  49. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/clients/{_key_a17f603b5907c97a5fac61a2eea7ecb2.json → _key_94d6296485729c61ea033a86a1ee2b9b.json} +1 -1
  50. package/test/resources/accounts-strict-origin-off/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7011.json +1 -1
  51. package/test/resources/config/templates/server/index.html +1 -1
  52. package/test/unit/account-manager-test.mjs +2 -2
  53. package/test/unit/account-template-test.mjs +0 -1
  54. package/test/unit/add-cert-request-test.mjs +0 -1
  55. package/test/unit/email-service-test.mjs +0 -1
  56. package/test/unit/email-welcome-test.mjs +1 -2
  57. package/test/unit/esm-imports.test.mjs +0 -1
  58. package/test/unit/oidc-manager-test.mjs +0 -1
  59. package/test/unit/solid-host-test.mjs +0 -1
  60. package/test/unit/user-account-test.mjs +0 -1
  61. package/test/unit/utils-test.mjs +1 -3
  62. package/test/utils/index.mjs +0 -1
  63. package/test/utils.mjs +3 -4
  64. package/test/validate-turtle.mjs +0 -1
  65. package/common/js/auth-buttons.js +0 -67
  66. package/common/js/index-buttons.js +0 -44
  67. package/coverage/tmp/coverage-2260-1766832656715-0.json +0 -1
@@ -6,7 +6,6 @@ import { UserStore } from '@solid/oidc-auth-manager'
6
6
  import UserAccount from '../../lib/models/user-account.mjs'
7
7
  import SolidAuthOIDC from '@solid/solid-auth-oidc'
8
8
 
9
- import fetch from 'node-fetch'
10
9
  import localStorage from 'localstorage-memory'
11
10
  import { URL, URLSearchParams } from 'whatwg-url'
12
11
  import { cleanDir, cp } from '../utils.mjs'
@@ -463,7 +462,7 @@ describe('Authentication API (OIDC) - With strict origins turned off', () => {
463
462
  // Since user is not logged in, /authorize redirects to /login
464
463
  expect(res.status).to.equal(302)
465
464
 
466
- loginUri = new URL(res.headers.get('location'))
465
+ loginUri = new URL(res.headers.get('location'), aliceServerUri)
467
466
  expect(loginUri.toString().startsWith(aliceServerUri + '/login'))
468
467
  .to.be.true()
469
468
 
@@ -507,8 +506,11 @@ describe('Authentication API (OIDC) - With strict origins turned off', () => {
507
506
  })
508
507
  .then(res => {
509
508
  expect(res.status).to.equal(302)
510
- postLoginUri = res.headers.get('location')
511
- cookie = res.headers.get('set-cookie')
509
+ const location = res.headers.get('location')
510
+ postLoginUri = new URL(location, aliceServerUri).toString()
511
+ // Native fetch: get first set-cookie header
512
+ const setCookieHeaders = res.headers.getSetCookie ? res.headers.getSetCookie() : [res.headers.get('set-cookie')]
513
+ cookie = setCookieHeaders[0]
512
514
 
513
515
  // Successful login gets redirected back to /authorize and then
514
516
  // back to app
@@ -533,20 +535,23 @@ describe('Authentication API (OIDC) - With strict origins turned off', () => {
533
535
  })
534
536
  .then(res => {
535
537
  expect(res.status).to.equal(302)
536
- const postLoginUri = res.headers.get('location')
537
- const cookie = res.headers.get('set-cookie')
538
+ const location = res.headers.get('location')
539
+ const postSharingUri = new URL(location, aliceServerUri).toString()
540
+ const setCookieHeaders = res.headers.getSetCookie ? res.headers.getSetCookie() : [res.headers.get('set-cookie')]
541
+ const cookieFromSharing = setCookieHeaders[0] || cookie
538
542
 
539
543
  // Successful login gets redirected back to /authorize and then
540
544
  // back to app
541
- expect(postLoginUri.startsWith(aliceServerUri + '/authorize'))
545
+ expect(postSharingUri.startsWith(aliceServerUri + '/authorize'))
542
546
  .to.be.true()
543
547
 
544
- return fetch(postLoginUri, { redirect: 'manual', headers: { cookie } })
548
+ return fetch(postSharingUri, { redirect: 'manual', headers: { cookie: cookieFromSharing } })
545
549
  })
546
550
  .then(res => {
547
551
  // User gets redirected back to original app
548
552
  expect(res.status).to.equal(302)
549
- callbackUri = res.headers.get('location')
553
+ const location = res.headers.get('location')
554
+ callbackUri = location.startsWith('http') ? location : new URL(location, aliceServerUri).toString()
550
555
  expect(callbackUri.startsWith('https://app.example.com#'))
551
556
  })
552
557
  })
@@ -1,4 +1,3 @@
1
- /* eslint-disable no-unused-expressions */
2
1
  import { fileURLToPath } from 'url'
3
2
  import path from 'path'
4
3
  import supertest from 'supertest'
@@ -1,6 +1,6 @@
1
- /* eslint-disable no-unused-expressions */
2
1
  import { fileURLToPath } from 'url'
3
2
  import path from 'path'
3
+ import { URL } from 'url'
4
4
  import chai from 'chai'
5
5
  import fs from 'fs-extra'
6
6
  import { fromServerConfig } from '../../lib/models/oidc-manager.mjs'
@@ -38,5 +38,98 @@ describe('OidcManager', () => {
38
38
  expect(oidc.users.backend.path.endsWith('db/oidc/users'))
39
39
  expect(oidc.users.saltRounds).to.equal(saltRounds)
40
40
  })
41
+
42
+ it('should set the provider issuer which is used for iss claim in tokens', () => {
43
+ const providerUri = 'https://pivot-test.solidproject.org:8443'
44
+ const host = SolidHost.from({ serverUri: providerUri })
45
+
46
+ const saltRounds = 5
47
+ const argv = {
48
+ host,
49
+ dbPath,
50
+ saltRounds
51
+ }
52
+
53
+ const oidc = fromServerConfig(argv)
54
+
55
+ // Verify the issuer is set correctly for RFC 9207 compliance
56
+ // The iss claim in tokens should match this issuer value
57
+ expect(oidc.provider.issuer).to.exist
58
+ expect(oidc.provider.issuer).to.not.be.null
59
+ expect(oidc.provider.issuer).to.equal(providerUri)
60
+ console.log('Provider issuer (used for iss claim):', oidc.provider.issuer)
61
+ })
62
+ })
63
+
64
+ describe('RFC 9207 - Authorization redirect with iss parameter', () => {
65
+ it('should include iss parameter when redirecting after authorization', async () => {
66
+ const providerUri = 'https://localhost:8443'
67
+ const host = SolidHost.from({ providerUri })
68
+
69
+ const argv = {
70
+ host,
71
+ dbPath,
72
+ saltRounds: 5
73
+ }
74
+
75
+ const oidc = fromServerConfig(argv)
76
+
77
+ // Dynamically import BaseRequest from oidc-op
78
+ const { default: BaseRequest } = await import('@solid/oidc-op/src/handlers/BaseRequest.js')
79
+
80
+ // Create a mock request/response to test the redirect behavior
81
+ const mockReq = {
82
+ method: 'GET',
83
+ query: {
84
+ response_type: 'code',
85
+ redirect_uri: 'https://app.example.com/callback',
86
+ client_id: 'https://app.example.com',
87
+ state: 'test-state'
88
+ }
89
+ }
90
+
91
+ const mockRes = {
92
+ redirectCalled: false,
93
+ redirectUrl: '',
94
+ redirect (url) {
95
+ this.redirectCalled = true
96
+ this.redirectUrl = url
97
+ }
98
+ }
99
+
100
+ const request = new BaseRequest(mockReq, mockRes, oidc.provider)
101
+ request.params = mockReq.query
102
+
103
+ // Simulate a successful authorization by calling redirect with auth data
104
+ try {
105
+ request.redirect({ code: 'test-auth-code' })
106
+ } catch (err) {
107
+ // The redirect throws a HandledError, which is expected behavior
108
+ // We just need to check that the redirect was called with the right URL
109
+ }
110
+
111
+ expect(mockRes.redirectCalled).to.be.true
112
+ expect(mockRes.redirectUrl).to.exist
113
+
114
+ // Parse the redirect URL to check for iss parameter
115
+ const redirectUrl = new URL(mockRes.redirectUrl)
116
+
117
+ // The iss parameter can be in either the query string or hash fragment
118
+ // depending on the response_mode (query or fragment)
119
+ let issParam = redirectUrl.searchParams.get('iss')
120
+ if (!issParam && redirectUrl.hash) {
121
+ // Check in the hash fragment
122
+ const hashParams = new URLSearchParams(redirectUrl.hash.substring(1))
123
+ issParam = hashParams.get('iss')
124
+ }
125
+
126
+ console.log('Redirect URL:', mockRes.redirectUrl)
127
+ console.log('RFC 9207 - iss parameter in redirect:', issParam)
128
+
129
+ // RFC 9207: The iss parameter MUST be present and match the provider issuer
130
+ expect(issParam, 'RFC 9207: iss parameter must be present in authorization response').to.exist
131
+ expect(issParam).to.not.be.null
132
+ expect(issParam).to.equal(providerUri)
133
+ })
41
134
  })
42
- })
135
+ })
@@ -11,7 +11,7 @@ import ldnode, { createServer } from '../../index.mjs'
11
11
 
12
12
  const __filename = fileURLToPath(import.meta.url)
13
13
  const __dirname = path.dirname(__filename)
14
- console.log(getTestRoot())
14
+ // console.log(getTestRoot())
15
15
 
16
16
  describe('LDNODE params', function () {
17
17
  describe('suffixMeta', function () {
@@ -46,7 +46,7 @@ describe('LDNODE params', function () {
46
46
 
47
47
  it('should fallback on current working directory', function () {
48
48
  assert.equal(path.normalize(ldp.locals.ldp.resourceMapper._rootPath), path.normalize(process.cwd()))
49
- console.log('Root path is', ldp.locals.ldp.resourceMapper._rootPath)
49
+ // console.log('Root path is', ldp.locals.ldp.resourceMapper._rootPath)
50
50
  })
51
51
 
52
52
  it('new : should find resource in correct path', function (done) {
@@ -57,7 +57,7 @@ describe('LDNODE params', function () {
57
57
  const fileContent = '<#current> <#temp> 123 .'
58
58
  fs.mkdirSync(dirPath, { recursive: true })
59
59
  fs.writeFileSync(filePath, fileContent)
60
- console.log('Wrote file to', filePath)
60
+ // console.log('Wrote file to', filePath)
61
61
  server.get('/sampleContainer/example.ttl')
62
62
  .expect('Link', /http:\/\/www.w3.org\/ns\/ldp#Resource/)
63
63
  .expect(200)
@@ -71,7 +71,7 @@ describe('LDNODE params', function () {
71
71
  it.skip('initial : should find resource in correct path', function (done) {
72
72
  // Write to the default resources directory, matching the server's root
73
73
  const resourcePath = path.join('sampleContainer', 'example.ttl')
74
- console.log('initial : Writing test resource to', resourcePath)
74
+ // console.log('initial : Writing test resource to', resourcePath)
75
75
  setTestRoot(path.join(__dirname, '../resources/'))
76
76
  write('<#current> <#temp> 123 .', resourcePath)
77
77
 
@@ -102,7 +102,7 @@ describe('LDNODE params', function () {
102
102
  const fileContent = '<#current> <#temp> 123 .'
103
103
  fs.mkdirSync(dirPath, { recursive: true })
104
104
  fs.writeFileSync(filePath, fileContent)
105
- console.log('Wrote file to', filePath)
105
+ // console.log('Wrote file to', filePath)
106
106
 
107
107
  server.get('/sampleContainer/example.ttl')
108
108
  .expect('Link', /http:\/\/www.w3.org\/ns\/ldp#Resource/)
@@ -1,4 +1,3 @@
1
- /* eslint-disable no-unused-expressions */
2
1
  import path from 'path'
3
2
  import chai from 'chai'
4
3
 
@@ -1,4 +1,3 @@
1
- /* eslint-disable no-unused-expressions */
2
1
  import supertest from 'supertest'
3
2
  import rdf from 'rdflib'
4
3
  import ldnode from '../../index.mjs'
@@ -1 +1 @@
1
- {"redirect_uris":["https://localhost:3457/api/oidc/rp/https%3A%2F%2Flocalhost%3A3457"],"client_id":"5319f8e8e4ea3214c2e92b252520d355","client_secret":"b6af582c2fc6ef6aeda6d1a208a0e4aa","response_types":["code","id_token token","code id_token token"],"grant_types":["authorization_code","implicit","refresh_token","client_credentials"],"application_type":"web","client_name":"Solid OIDC RP for https://localhost:3457","id_token_signed_response_alg":"RS256","token_endpoint_auth_method":"client_secret_basic","default_max_age":86400,"post_logout_redirect_uris":["https://localhost:3457/goodbye"]}
1
+ {"redirect_uris":["https://localhost:3457/api/oidc/rp/https%3A%2F%2Flocalhost%3A3457"],"client_id":"69eaaa0e44e3f95d54a021c5b41e6d72","client_secret":"676dd69f6581893b7f99c474575e8e35","response_types":["code","id_token token","code id_token token"],"grant_types":["authorization_code","implicit","refresh_token","client_credentials"],"application_type":"web","client_name":"Solid OIDC RP for https://localhost:3457","id_token_signed_response_alg":"RS256","token_endpoint_auth_method":"client_secret_basic","default_max_age":86400,"post_logout_redirect_uris":["https://localhost:3457/goodbye"]}
@@ -1 +1 @@
1
- {"provider":{"url":"https://localhost:3457","configuration":{"issuer":"https://localhost:3457","jwks_uri":"https://localhost:3457/jwks","scopes_supported":["openid","offline_access"],"response_types_supported":["code","code token","code id_token","id_token","id_token token","code id_token token","none"],"token_types_supported":["legacyPop","dpop"],"response_modes_supported":["query","fragment"],"grant_types_supported":["authorization_code","implicit","refresh_token","client_credentials"],"subject_types_supported":["public"],"id_token_signing_alg_values_supported":["RS256","RS384","RS512","none"],"token_endpoint_auth_methods_supported":["client_secret_basic"],"token_endpoint_auth_signing_alg_values_supported":["RS256"],"display_values_supported":[],"claim_types_supported":["normal"],"claims_supported":[],"claims_parameter_supported":false,"request_parameter_supported":true,"request_uri_parameter_supported":false,"require_request_uri_registration":false,"check_session_iframe":"https://localhost:3457/session","end_session_endpoint":"https://localhost:3457/logout","authorization_endpoint":"https://localhost:3457/authorize","token_endpoint":"https://localhost:3457/token","userinfo_endpoint":"https://localhost:3457/userinfo","registration_endpoint":"https://localhost:3457/register"},"jwks":{"keys":[{"kid":"lNZOB-DPE1k","kty":"RSA","alg":"RS256","n":"uvih8HfZj7Wu5Y8knLHxRY6v7oHL2jXWD-B6hXCreYhwaG9EEUt6Rp94p8-JBug3ywo8C_9dNg0RtQLEttcIC_vhqqlJI3pZxpGKXuD9h7XK-PppFVvgnfIGADG0Z-WzbcGDxlefStohR31Hjw5U3ioG3VtXGAYbqlOHM1l2UgDMJwBD5qwFmPP8gp5E2WQKCsuLvxDuOrkAbSDjw2zaI3RRmbLzdj4QkGej8GXhBptgM9RwcKmnoXu0sUdlootmcdiEg74yQ9M6EshNMhiv4k_W0rl7RqVOEL2PsAdmdbF_iWL8a90rGYOEILBrlU6bBR2mTvjV_Hvq-ifFy1YAmQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"Y38YKDtydoE","kty":"RSA","alg":"RS384","n":"tfgZKLjc8UMIblfAlVibJI_2uAxDNprn2VVLebS0sp6d1mtCXQkMYLlJ6e-7kavl8we391Ovnq5bRgpsFRq_LtRX9MpVlfioAUHwWPEG-R6vrQjgo4uynVhI3UEPHyNmZA5J4u34HNVTfAgmquomwwOmOv29ZNRxuYP1kVtscz1JeFPwg6LA7BxWrLc9ev4FQR6tjJKdo2kdLjAXR92odbCzJZ_jdYT3vIVCexMHxhoKnqCImkhfgKbGXcPHXWcelmuA2tzBaLut-Jjo0nJVQjRNDqy0Gyac0TptwFIxaiyHeTqugolUmEaJSfBSLszIRdlOTIGPJ7zdg5dJFK_Lxw","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"WyMVv6BJ5Dk","kty":"RSA","alg":"RS512","n":"5JDlpbm2TjSW1wpdUZc5NHOqVVrNH_GumoODK_mk-MqImaIRpdR9b1ZJrK6FrW7HIF2bXvebD7olmp9a1goqe-ILbL_ORmhzlhRtyhjWQ-UOZqK5yOXqXXGQXgmok6TN-s55A-h_g12A7Yk5Y5S8EVa9EA4Axwqvm-Q_AkH0yS1qJo6BXYXb1fx205ucx-Ccot2LEBfxv8M7NOFTa-_G-sNchiKQMRoLhbZtLbSK2R1jkqGciEiRSLeXNG4nDu7Wd91-vhBixA1McxnzW96mW8lQwNXXo4gNH7SjONtYLlPQhZVEbmsQmXrOQN8a5RDkybFOIsbucItizSE9V_D7WQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"UykSj_HLgFA","kty":"RSA","alg":"RS256","n":"u79eQlGJN2XFNR-uEmPVtrB_ENRqaS81o6m63tZ5-PwhGHCwJ7rfVnnnvf6Ij_p91Z9pNpWBIVyZcw6UmQIoIBH-3BfxdaqhBxX9bf_N78TKj8_HU5IYjGijale4gog3kj9W2tJJO7R9iA43msjwLRD7pbAHp1iKFJgVTSXJlyLRbC82Dj4ivsEgJjPGvZt16OsGP5myIQwXEGzSPcEI0R9daZE5iM6xFZosaJ8B77eU-Aj3ciwxUBPi5BSZi2P1ZsF4QgSj3N7ZLbVKNW4FFr84IamA2YI0D7PyyNAE2PUZT8n0jHWRJKunuZuy5mgBY8H41KdBI6gNJqY90nHeJw","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"BJDNTt8RpPE","kty":"RSA","alg":"RS384","n":"nXTd5AoT220nBkW6Zeax8caUI7_Tt0y4v9TEW8TOrzCVvhLBiKpQPjILUTfkGHzxPtysEzDQFSYdHWvg_fvGYItjJBunBMsKCNcb2_CDr2HXD6C0s62bAgct8bBSoaT1MLQ_3MaFKXSF3ZuB87X2B8CVUJ386HP2GY1kl54BuMdFELNZYhy9S_D0KHnQls52Vvb99X9WaYOyxvfr03PG-9EycnkWas5tn1pPFzT0DtJtBJ4IBtXQxTr98jpn_MCz1gRnMgzzkfSOcrMkkMXxePqxNINVKFXtRy7DaJiFOcCMbuK2RJUkSfY2uKcx0aKbp5Xhvix1W8N7c0Y90i6_6w","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"z8iijSOOIs4","kty":"RSA","alg":"RS512","n":"rPCHP9XeTGOLf1Ezxeq_bdGdvYQZa993YcSVudT0EN6drTWqjykhUVEkT4MGAvLvax38kLARbPUTgMUV9UckDDWn6lRq4q6IZ5pytNOieQKZHzjEmQGzlbnEn1F2m1i5SAfBL-qsnt5q2RXMAiIUXk9q1ChJEHJxOZxnRIoQMc7yTsjjSdtIZKePFiYFn0nsl3A234ByyIBRjzZeoYEtTQKjDR7fP9LO78oZAgpwoGqmfI4IltqQYkFoqrN8I8l1yiJGyuvZRgDXUZ2fxGOQx2WD4xvlFL2TOCfN1UaPE9R4JdbRLLAOf5u1Sqnh4XTjDBhBbVodsmmbtvk4wFo-GQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"zD76wa11A2Y","kty":"RSA","alg":"RS256","n":"nMaSioq1An1J3tbkmc-zRrR8lkbP-WUVRuYhDxQvV-OcBw1R6cdyCcoeFJ1zuUT7ne6BlU6GMPRHuRKaH0KuOaiktUYtXm06T_HvtKFgCQSAKjMUj_ZHfTAJP8ahUsIc0D995XKp7nIGRF7Iy7I24QQFPRh7PmGlREZ52GJgYQgbm020-sWani0MqHoUFBlWxZW9NEqY1c3brN_qWnzjRKly6Kkk3sW1XHPcRLvoHnHQ6TKXJ8pfl-bNjTfK6zq9fDCZ_TY3qQZy66yT_2XPO6X0GHTdJsZlCj7Jg0qrilTHUkJra1bppTSAtVSQnSmYt_IV8zOYiVdJ3kw2khPcKw","e":"AQAB","key_ops":["verify"],"ext":true}]}},"defaults":{},"registration":{"redirect_uris":["https://localhost:3457/api/oidc/rp/https%3A%2F%2Flocalhost%3A3457"],"client_id":"5319f8e8e4ea3214c2e92b252520d355","client_secret":"b6af582c2fc6ef6aeda6d1a208a0e4aa","response_types":["code","id_token token","code id_token token"],"grant_types":["authorization_code","implicit","refresh_token","client_credentials"],"application_type":"web","client_name":"Solid OIDC RP for https://localhost:3457","id_token_signed_response_alg":"RS256","token_endpoint_auth_method":"client_secret_basic","default_max_age":86400,"post_logout_redirect_uris":["https://localhost:3457/goodbye"],"registration_access_token":"eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2xvY2FsaG9zdDozNDU3IiwiYXVkIjoiNTMxOWY4ZThlNGVhMzIxNGMyZTkyYjI1MjUyMGQzNTUiLCJzdWIiOiI1MzE5ZjhlOGU0ZWEzMjE0YzJlOTJiMjUyNTIwZDM1NSJ9.iUrTNs_GE3RstySlnlmFpHNmuUfcPg91PcEaXDSFnX7rgijFPlkyy8JrotsHnxVMDenwRvoa-B6dJ3RK32rTWj3Q8l6adwKtt8vX70TELv0Dmv-h1JdkuVBKP_BJF2a7pK3Vu3sRfrYvSurtbxhiPsLh8TGjt_Dh-BJgb8Fpv2TZ8Fzj6KkzFYvXP5gwZUrb7lSyrXlCPSnvaL0xLIceK_GSji79pVP2NKI_FAWDx6sZBZ9j2c0Fw2k4A_oY_q1UyC2pJFzElyzPRwI_tX5x9QYyQ9J6YfYD2V9yqftz3NRkTN4PMzdLUvVXhtcSkda9ryU4R-te2CYCkP8AFJRwgA","registration_client_uri":"https://localhost:3457/register/5319f8e8e4ea3214c2e92b252520d355","client_id_issued_at":1766832640,"client_secret_expires_at":0},"store":{}}
1
+ {"provider":{"url":"https://localhost:3457","configuration":{"issuer":"https://localhost:3457","jwks_uri":"https://localhost:3457/jwks","scopes_supported":["openid","offline_access"],"response_types_supported":["code","code token","code id_token","id_token","id_token token","code id_token token","none"],"token_types_supported":["legacyPop","dpop"],"response_modes_supported":["query","fragment"],"grant_types_supported":["authorization_code","implicit","refresh_token","client_credentials"],"subject_types_supported":["public"],"id_token_signing_alg_values_supported":["RS256","RS384","RS512","none"],"token_endpoint_auth_methods_supported":["client_secret_basic"],"token_endpoint_auth_signing_alg_values_supported":["RS256"],"display_values_supported":[],"claim_types_supported":["normal"],"claims_supported":[],"claims_parameter_supported":false,"request_parameter_supported":true,"request_uri_parameter_supported":false,"require_request_uri_registration":false,"check_session_iframe":"https://localhost:3457/session","end_session_endpoint":"https://localhost:3457/logout","authorization_endpoint":"https://localhost:3457/authorize","token_endpoint":"https://localhost:3457/token","userinfo_endpoint":"https://localhost:3457/userinfo","registration_endpoint":"https://localhost:3457/register"},"jwks":{"keys":[{"kid":"lNZOB-DPE1k","kty":"RSA","alg":"RS256","n":"uvih8HfZj7Wu5Y8knLHxRY6v7oHL2jXWD-B6hXCreYhwaG9EEUt6Rp94p8-JBug3ywo8C_9dNg0RtQLEttcIC_vhqqlJI3pZxpGKXuD9h7XK-PppFVvgnfIGADG0Z-WzbcGDxlefStohR31Hjw5U3ioG3VtXGAYbqlOHM1l2UgDMJwBD5qwFmPP8gp5E2WQKCsuLvxDuOrkAbSDjw2zaI3RRmbLzdj4QkGej8GXhBptgM9RwcKmnoXu0sUdlootmcdiEg74yQ9M6EshNMhiv4k_W0rl7RqVOEL2PsAdmdbF_iWL8a90rGYOEILBrlU6bBR2mTvjV_Hvq-ifFy1YAmQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"Y38YKDtydoE","kty":"RSA","alg":"RS384","n":"tfgZKLjc8UMIblfAlVibJI_2uAxDNprn2VVLebS0sp6d1mtCXQkMYLlJ6e-7kavl8we391Ovnq5bRgpsFRq_LtRX9MpVlfioAUHwWPEG-R6vrQjgo4uynVhI3UEPHyNmZA5J4u34HNVTfAgmquomwwOmOv29ZNRxuYP1kVtscz1JeFPwg6LA7BxWrLc9ev4FQR6tjJKdo2kdLjAXR92odbCzJZ_jdYT3vIVCexMHxhoKnqCImkhfgKbGXcPHXWcelmuA2tzBaLut-Jjo0nJVQjRNDqy0Gyac0TptwFIxaiyHeTqugolUmEaJSfBSLszIRdlOTIGPJ7zdg5dJFK_Lxw","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"WyMVv6BJ5Dk","kty":"RSA","alg":"RS512","n":"5JDlpbm2TjSW1wpdUZc5NHOqVVrNH_GumoODK_mk-MqImaIRpdR9b1ZJrK6FrW7HIF2bXvebD7olmp9a1goqe-ILbL_ORmhzlhRtyhjWQ-UOZqK5yOXqXXGQXgmok6TN-s55A-h_g12A7Yk5Y5S8EVa9EA4Axwqvm-Q_AkH0yS1qJo6BXYXb1fx205ucx-Ccot2LEBfxv8M7NOFTa-_G-sNchiKQMRoLhbZtLbSK2R1jkqGciEiRSLeXNG4nDu7Wd91-vhBixA1McxnzW96mW8lQwNXXo4gNH7SjONtYLlPQhZVEbmsQmXrOQN8a5RDkybFOIsbucItizSE9V_D7WQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"UykSj_HLgFA","kty":"RSA","alg":"RS256","n":"u79eQlGJN2XFNR-uEmPVtrB_ENRqaS81o6m63tZ5-PwhGHCwJ7rfVnnnvf6Ij_p91Z9pNpWBIVyZcw6UmQIoIBH-3BfxdaqhBxX9bf_N78TKj8_HU5IYjGijale4gog3kj9W2tJJO7R9iA43msjwLRD7pbAHp1iKFJgVTSXJlyLRbC82Dj4ivsEgJjPGvZt16OsGP5myIQwXEGzSPcEI0R9daZE5iM6xFZosaJ8B77eU-Aj3ciwxUBPi5BSZi2P1ZsF4QgSj3N7ZLbVKNW4FFr84IamA2YI0D7PyyNAE2PUZT8n0jHWRJKunuZuy5mgBY8H41KdBI6gNJqY90nHeJw","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"BJDNTt8RpPE","kty":"RSA","alg":"RS384","n":"nXTd5AoT220nBkW6Zeax8caUI7_Tt0y4v9TEW8TOrzCVvhLBiKpQPjILUTfkGHzxPtysEzDQFSYdHWvg_fvGYItjJBunBMsKCNcb2_CDr2HXD6C0s62bAgct8bBSoaT1MLQ_3MaFKXSF3ZuB87X2B8CVUJ386HP2GY1kl54BuMdFELNZYhy9S_D0KHnQls52Vvb99X9WaYOyxvfr03PG-9EycnkWas5tn1pPFzT0DtJtBJ4IBtXQxTr98jpn_MCz1gRnMgzzkfSOcrMkkMXxePqxNINVKFXtRy7DaJiFOcCMbuK2RJUkSfY2uKcx0aKbp5Xhvix1W8N7c0Y90i6_6w","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"z8iijSOOIs4","kty":"RSA","alg":"RS512","n":"rPCHP9XeTGOLf1Ezxeq_bdGdvYQZa993YcSVudT0EN6drTWqjykhUVEkT4MGAvLvax38kLARbPUTgMUV9UckDDWn6lRq4q6IZ5pytNOieQKZHzjEmQGzlbnEn1F2m1i5SAfBL-qsnt5q2RXMAiIUXk9q1ChJEHJxOZxnRIoQMc7yTsjjSdtIZKePFiYFn0nsl3A234ByyIBRjzZeoYEtTQKjDR7fP9LO78oZAgpwoGqmfI4IltqQYkFoqrN8I8l1yiJGyuvZRgDXUZ2fxGOQx2WD4xvlFL2TOCfN1UaPE9R4JdbRLLAOf5u1Sqnh4XTjDBhBbVodsmmbtvk4wFo-GQ","e":"AQAB","key_ops":["verify"],"ext":true},{"kid":"zD76wa11A2Y","kty":"RSA","alg":"RS256","n":"nMaSioq1An1J3tbkmc-zRrR8lkbP-WUVRuYhDxQvV-OcBw1R6cdyCcoeFJ1zuUT7ne6BlU6GMPRHuRKaH0KuOaiktUYtXm06T_HvtKFgCQSAKjMUj_ZHfTAJP8ahUsIc0D995XKp7nIGRF7Iy7I24QQFPRh7PmGlREZ52GJgYQgbm020-sWani0MqHoUFBlWxZW9NEqY1c3brN_qWnzjRKly6Kkk3sW1XHPcRLvoHnHQ6TKXJ8pfl-bNjTfK6zq9fDCZ_TY3qQZy66yT_2XPO6X0GHTdJsZlCj7Jg0qrilTHUkJra1bppTSAtVSQnSmYt_IV8zOYiVdJ3kw2khPcKw","e":"AQAB","key_ops":["verify"],"ext":true}]}},"defaults":{},"registration":{"redirect_uris":["https://localhost:3457/api/oidc/rp/https%3A%2F%2Flocalhost%3A3457"],"client_id":"69eaaa0e44e3f95d54a021c5b41e6d72","client_secret":"676dd69f6581893b7f99c474575e8e35","response_types":["code","id_token token","code id_token token"],"grant_types":["authorization_code","implicit","refresh_token","client_credentials"],"application_type":"web","client_name":"Solid OIDC RP for https://localhost:3457","id_token_signed_response_alg":"RS256","token_endpoint_auth_method":"client_secret_basic","default_max_age":86400,"post_logout_redirect_uris":["https://localhost:3457/goodbye"],"registration_access_token":"eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2xvY2FsaG9zdDozNDU3IiwiYXVkIjoiNjllYWFhMGU0NGUzZjk1ZDU0YTAyMWM1YjQxZTZkNzIiLCJzdWIiOiI2OWVhYWEwZTQ0ZTNmOTVkNTRhMDIxYzViNDFlNmQ3MiJ9.RYkuJ1wcFa-9J-wDyxnPkGjzQYV-DhkB-13VOzceJrT9zAL93P_ubUG0UEB7VPkzOYUg9j_TrX7Rc2Y0uYYZoOH0Vq43xrn0mEVY9wyBafKIexKJWb67rRi-3n3oRlHjC65AP_PLpuusCxQBdqq2Hv6YyR4cDfJs_C2ch3AEUfbKXWIndAmDjeLABum1RoD8LAOfda_bvLdVJEd5KnkTX3_ivKHH1IAcwZROuZdh5exwExrA2VOGDGTM_S34Vm-1tgFLusr_y7-7CYpsA9LBg7LL9KB4_kh6b50d640eV0KpeQUOCC4eQs7VCtvkh2Y0Tjz5HRQqEoFks0MJmbLcEw","registration_client_uri":"https://localhost:3457/register/69eaaa0e44e3f95d54a021c5b41e6d72","client_id_issued_at":1767721054,"client_secret_expires_at":0},"store":{}}
@@ -1 +1 @@
1
- {"redirect_uris":["https://localhost:7000/api/oidc/rp/https%3A%2F%2Flocalhost%3A7000"],"client_id":"9c0fd8442675a1afbe5115b9ae300c65","client_secret":"41983d185d419a80a807177c25ac5a98","response_types":["code","id_token token","code id_token token"],"grant_types":["authorization_code","implicit","refresh_token","client_credentials"],"application_type":"web","client_name":"Solid OIDC RP for https://localhost:7000","id_token_signed_response_alg":"RS256","token_endpoint_auth_method":"client_secret_basic","default_max_age":86400,"post_logout_redirect_uris":["https://localhost:7000/goodbye"]}
1
+ {"redirect_uris":["https://localhost:7000/api/oidc/rp/https%3A%2F%2Flocalhost%3A7000"],"client_id":"c07d7590e034645477f72d1d3000b04e","client_secret":"1ba8ff54cc77601349cf9312d77c3336","response_types":["code","id_token token","code id_token token"],"grant_types":["authorization_code","implicit","refresh_token","client_credentials"],"application_type":"web","client_name":"Solid OIDC RP for https://localhost:7000","id_token_signed_response_alg":"RS256","token_endpoint_auth_method":"client_secret_basic","default_max_age":86400,"post_logout_redirect_uris":["https://localhost:7000/goodbye"]}