@owlmeans/server-oidc-rp 0.1.0

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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +520 -0
  3. package/build/.gitkeep +0 -0
  4. package/build/actions/index.d.ts +3 -0
  5. package/build/actions/index.d.ts.map +1 -0
  6. package/build/actions/index.js +3 -0
  7. package/build/actions/index.js.map +1 -0
  8. package/build/actions/init.d.ts +3 -0
  9. package/build/actions/init.d.ts.map +1 -0
  10. package/build/actions/init.js +68 -0
  11. package/build/actions/init.js.map +1 -0
  12. package/build/actions/process.d.ts +17 -0
  13. package/build/actions/process.d.ts.map +1 -0
  14. package/build/actions/process.js +80 -0
  15. package/build/actions/process.js.map +1 -0
  16. package/build/auth/consts.d.ts +2 -0
  17. package/build/auth/consts.d.ts.map +1 -0
  18. package/build/auth/consts.js +2 -0
  19. package/build/auth/consts.js.map +1 -0
  20. package/build/auth/index.d.ts +2 -0
  21. package/build/auth/index.d.ts.map +1 -0
  22. package/build/auth/index.js +2 -0
  23. package/build/auth/index.js.map +1 -0
  24. package/build/auth/plugins/index.d.ts +2 -0
  25. package/build/auth/plugins/index.d.ts.map +1 -0
  26. package/build/auth/plugins/index.js +6 -0
  27. package/build/auth/plugins/index.js.map +1 -0
  28. package/build/auth/plugins/oidc-client.d.ts +50 -0
  29. package/build/auth/plugins/oidc-client.d.ts.map +1 -0
  30. package/build/auth/plugins/oidc-client.js +211 -0
  31. package/build/auth/plugins/oidc-client.js.map +1 -0
  32. package/build/auth/plugins/types.d.ts +1 -0
  33. package/build/auth/plugins/types.d.ts.map +1 -0
  34. package/build/auth/plugins/types.js +2 -0
  35. package/build/auth/plugins/types.js.map +1 -0
  36. package/build/consts.d.ts +20 -0
  37. package/build/consts.d.ts.map +1 -0
  38. package/build/consts.js +20 -0
  39. package/build/consts.js.map +1 -0
  40. package/build/gate.d.ts +3 -0
  41. package/build/gate.d.ts.map +1 -0
  42. package/build/gate.js +22 -0
  43. package/build/gate.js.map +1 -0
  44. package/build/guard.d.ts +6 -0
  45. package/build/guard.d.ts.map +1 -0
  46. package/build/guard.js +13 -0
  47. package/build/guard.js.map +1 -0
  48. package/build/index.d.ts +8 -0
  49. package/build/index.d.ts.map +1 -0
  50. package/build/index.js +7 -0
  51. package/build/index.js.map +1 -0
  52. package/build/model/consts.d.ts +6 -0
  53. package/build/model/consts.d.ts.map +1 -0
  54. package/build/model/consts.js +7 -0
  55. package/build/model/consts.js.map +1 -0
  56. package/build/model/gate.d.ts +4 -0
  57. package/build/model/gate.d.ts.map +1 -0
  58. package/build/model/gate.js +98 -0
  59. package/build/model/gate.js.map +1 -0
  60. package/build/model/types.d.ts +25 -0
  61. package/build/model/types.d.ts.map +1 -0
  62. package/build/model/types.js +2 -0
  63. package/build/model/types.js.map +1 -0
  64. package/build/models.d.ts +1 -0
  65. package/build/models.d.ts.map +1 -0
  66. package/build/models.js +2 -0
  67. package/build/models.js.map +1 -0
  68. package/build/modules.d.ts +3 -0
  69. package/build/modules.d.ts.map +1 -0
  70. package/build/modules.js +12 -0
  71. package/build/modules.js.map +1 -0
  72. package/build/service.d.ts +3 -0
  73. package/build/service.d.ts.map +1 -0
  74. package/build/service.js +186 -0
  75. package/build/service.js.map +1 -0
  76. package/build/types.d.ts +55 -0
  77. package/build/types.d.ts.map +1 -0
  78. package/build/types.js +2 -0
  79. package/build/types.js.map +1 -0
  80. package/build/utils/auth.d.ts +5 -0
  81. package/build/utils/auth.d.ts.map +1 -0
  82. package/build/utils/auth.js +48 -0
  83. package/build/utils/auth.js.map +1 -0
  84. package/build/utils/cache.d.ts +8 -0
  85. package/build/utils/cache.d.ts.map +1 -0
  86. package/build/utils/cache.js +7 -0
  87. package/build/utils/cache.js.map +1 -0
  88. package/build/utils/index.d.ts +5 -0
  89. package/build/utils/index.d.ts.map +1 -0
  90. package/build/utils/index.js +4 -0
  91. package/build/utils/index.js.map +1 -0
  92. package/build/utils/types.d.ts +10 -0
  93. package/build/utils/types.d.ts.map +1 -0
  94. package/build/utils/types.js +2 -0
  95. package/build/utils/types.js.map +1 -0
  96. package/build/utils/wrapped.d.ts +4 -0
  97. package/build/utils/wrapped.d.ts.map +1 -0
  98. package/build/utils/wrapped.js +3 -0
  99. package/build/utils/wrapped.js.map +1 -0
  100. package/build/wrapper.d.ts +3 -0
  101. package/build/wrapper.d.ts.map +1 -0
  102. package/build/wrapper.js +75 -0
  103. package/build/wrapper.js.map +1 -0
  104. package/package.json +71 -0
  105. package/src/actions/index.ts +3 -0
  106. package/src/actions/init.ts +90 -0
  107. package/src/actions/process.ts +113 -0
  108. package/src/auth/consts.ts +2 -0
  109. package/src/auth/index.ts +2 -0
  110. package/src/auth/plugins/index.ts +8 -0
  111. package/src/auth/plugins/oidc-client.ts +246 -0
  112. package/src/auth/plugins/types.ts +0 -0
  113. package/src/consts.ts +26 -0
  114. package/src/gate.ts +29 -0
  115. package/src/guard.ts +25 -0
  116. package/src/index.ts +7 -0
  117. package/src/model/consts.ts +6 -0
  118. package/src/model/gate.ts +129 -0
  119. package/src/model/types.ts +31 -0
  120. package/src/models.ts +1 -0
  121. package/src/modules.ts +30 -0
  122. package/src/service.ts +251 -0
  123. package/src/types.ts +64 -0
  124. package/src/utils/auth.ts +67 -0
  125. package/src/utils/cache.ts +12 -0
  126. package/src/utils/index.ts +5 -0
  127. package/src/utils/types.ts +10 -0
  128. package/src/utils/wrapped.ts +6 -0
  129. package/src/wrapper.ts +92 -0
  130. package/tsconfig.json +15 -0
  131. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,98 @@
1
+ import { AuthForbidden, AuthManagerError, AuthManagerUnsupported, AuthUnknown } from '@owlmeans/auth';
2
+ import { authService, DEFAULT_ALIAS } from '../consts.js';
3
+ import { cache, managedId } from '../utils/cache.js';
4
+ import { ResponseMode } from './consts.js';
5
+ export const createGateModel = (ctx) => {
6
+ const model = {
7
+ getClient: async (user) => {
8
+ const oidc = ctx.service(DEFAULT_ALIAS);
9
+ try {
10
+ return await oidc.getClient({
11
+ entityId: user.entityId,
12
+ clientId: oidc.entityToClientId({ entityId: user.entityId })
13
+ });
14
+ }
15
+ catch (e) {
16
+ if (e instanceof AuthManagerError) {
17
+ const [providers] = await ctx.module(authService.provider.list).call({
18
+ params: { service: ctx.cfg.alias ?? ctx.cfg.service },
19
+ query: { entityId: user.entityId }
20
+ });
21
+ if (providers.length < 1) {
22
+ throw new AuthUnknown();
23
+ }
24
+ oidc.registerTemporaryProvider(providers[0]);
25
+ return model.getClient(user);
26
+ }
27
+ throw e;
28
+ }
29
+ },
30
+ loadPermissions: async (user, permissions) => {
31
+ const record = await cache(ctx).get(managedId(user.token));
32
+ if (record.payload == null) {
33
+ throw new AuthForbidden('record');
34
+ }
35
+ const client = await model.getClient(user);
36
+ const metadata = client.getMetadata();
37
+ const tokenEndpoint = metadata.token_endpoint;
38
+ if (tokenEndpoint == null) {
39
+ throw new AuthManagerUnsupported('token-url');
40
+ }
41
+ const request = await model.makeRequest(model.fixPermissions(permissions, user), client);
42
+ request.subject_token = record.payload.access_token;
43
+ const response = await fetch(tokenEndpoint, await model.prepareRequest(client, request));
44
+ if (!response.ok) {
45
+ console.warn(await response.text());
46
+ return [];
47
+ }
48
+ const proofs = await response.json();
49
+ return permissions.filter(permission => {
50
+ const [fixed] = model.fixPermissions([permission], user);
51
+ const [resource, scope] = fixed.split(':');
52
+ const proof = proofs.find(p => p.rsid === resource || p.rsname === resource);
53
+ return proof != null
54
+ && (scope == null || (proof.scopes?.includes(scope) ?? false));
55
+ });
56
+ },
57
+ fixPermissions: (permissions, user) => permissions.map(perm => perm.replaceAll('{entity}', user.entityId ?? '-')),
58
+ prepareRequest: async (client, request) => {
59
+ let { permission, ..._request } = request;
60
+ const params = new URLSearchParams(_request);
61
+ permission = Array.isArray(permission) ? permission : [permission];
62
+ permission.forEach(perm => params.append('permission', perm));
63
+ const body = params.toString();
64
+ const cfg = client.getConfig();
65
+ const headers = {
66
+ 'Content-Type': 'application/x-www-form-urlencoded',
67
+ 'Authorization': `Basic ${Buffer.from(`${client.getClientId()}:${cfg.secret}`).toString('base64')}`,
68
+ 'Content-Length': `${body.length}`,
69
+ };
70
+ return { body, headers, method: 'POST' };
71
+ },
72
+ makeRequest: async (permissions, client) => {
73
+ const cfg = client.getConfig();
74
+ const clientId = client.getClientId();
75
+ const permission = {
76
+ grant_type: 'urn:ietf:params:oauth:grant-type:uma-ticket',
77
+ audience: clientId,
78
+ client_id: clientId,
79
+ secret: cfg.secret,
80
+ permission: permissions.reduce((output, permission) => {
81
+ const [resource, scope] = permission.split(':');
82
+ const idx = output.findIndex(perm => perm.startsWith(resource));
83
+ if (idx > -1) {
84
+ output[idx] += `, ${scope}`;
85
+ }
86
+ else {
87
+ output.push(`${resource}${scope ? `#${scope}` : ''}`);
88
+ }
89
+ return output;
90
+ }, []),
91
+ response_mode: ResponseMode.Permissions,
92
+ };
93
+ return permission;
94
+ }
95
+ };
96
+ return model;
97
+ };
98
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/model/gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Auth } from '@owlmeans/auth';
2
+ import type { OidcClientAdapter } from '../types.js';
3
+ import type { ResponseMode } from './consts.js';
4
+ export interface GateModel {
5
+ getClient: (user: Auth) => Promise<OidcClientAdapter>;
6
+ loadPermissions: (user: Auth, permissions: string[]) => Promise<string[]>;
7
+ fixPermissions: (permissions: string[], user: Auth) => string[];
8
+ prepareRequest: (client: OidcClientAdapter, request: PermissionRequest) => Promise<RequestInit>;
9
+ makeRequest: (permissions: string[], client: OidcClientAdapter) => Promise<PermissionRequest>;
10
+ }
11
+ export interface PermissionRequest {
12
+ grant_type: string;
13
+ audience: string;
14
+ client_id?: string;
15
+ secret?: string;
16
+ subject_token?: string;
17
+ permission: string | string[];
18
+ response_mode: ResponseMode;
19
+ }
20
+ export interface PermissionResponse {
21
+ rsid: string;
22
+ rsname: string;
23
+ scopes?: string[];
24
+ }
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAErD,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAEzE,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,CAAA;IAE/D,cAAc,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;IAE/F,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAC9F;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC7B,aAAa,EAAE,YAAY,CAAA;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { CommonModule } from '@owlmeans/module';
2
+ export declare const setupAuthServiceModules: (modules: CommonModule[], serviceAlias: string, prefix?: string) => void;
3
+ //# sourceMappingURL=modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAQpD,eAAO,MAAM,uBAAuB,YACzB,YAAY,EAAE,gBACT,MAAM,WACZ,MAAM,SAkBf,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { module, guard, filter, body } from '@owlmeans/module';
2
+ import { backend, route, RouteMethod, service } from '@owlmeans/route';
3
+ import { authService } from './consts.js';
4
+ import { elevate } from '@owlmeans/client-module';
5
+ import { GUARD_ED25519 } from '@owlmeans/auth-common';
6
+ import { OIDCTokenUpdateSchema } from '@owlmeans/oidc';
7
+ export const setupAuthServiceModules = (modules, serviceAlias, prefix = 'oidc-api') => {
8
+ modules.push(module(route(authService.provider.list, `/${prefix}/provider/:service`, service(serviceAlias)), guard(GUARD_ED25519)), module(route(authService.auth.update, `/${prefix}/auth/update`, backend(service(serviceAlias), RouteMethod.POST)), filter(body(OIDCTokenUpdateSchema), guard(GUARD_ED25519))));
9
+ elevate(modules, authService.provider.list);
10
+ elevate(modules, authService.auth.update);
11
+ };
12
+ //# sourceMappingURL=modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.js","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAAuB,EACvB,YAAoB,EACpB,SAAiB,UAAU,EAC3B,EAAE;IACF,OAAO,CAAC,IAAI,CACV,MAAM,CACJ,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,MAAM,oBAAoB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,EACvF,KAAK,CAAC,aAAa,CAAC,CACrB,EACD,MAAM,CACJ,KAAK,CACH,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,MAAM,cAAc,EACjD,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CACjD,EACD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAC1D,CACF,CAAA;IAED,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3C,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC3C,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { OidcClientService } from './types.js';
2
+ export declare const makeOidcClientService: (alias?: string) => OidcClientService;
3
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA0C,iBAAiB,EAAyC,MAAM,YAAY,CAAA;AAQlI,eAAO,MAAM,qBAAqB,WAAW,MAAM,KAAmB,iBAuOrE,CAAA"}
@@ -0,0 +1,186 @@
1
+ import { DEF_OIDC_ACCOUNT_LINKING, DEF_OIDC_PROVIDER_API, DEFAULT_ALIAS } from './consts.js';
2
+ import { assertContext, createService } from '@owlmeans/context';
3
+ import { AuthManagerError } from '@owlmeans/auth';
4
+ import { makeSecurityHelper } from '@owlmeans/config';
5
+ import * as client from 'openid-client';
6
+ import { Configuration } from 'openid-client';
7
+ // import { URL as SrvURL } from 'node:url'
8
+ export const makeOidcClientService = (alias = DEFAULT_ALIAS) => {
9
+ const service = createService(alias, {
10
+ getConfiguration: async (clientId) => {
11
+ const context = assertContext(service.ctx, alias);
12
+ let cfg = await service.getConfig(clientId);
13
+ if (cfg?.basePath == null) {
14
+ throw new AuthManagerError('oidc.client.basepath');
15
+ }
16
+ if (cfg.service == null) {
17
+ throw new AuthManagerError('oidc.client.service');
18
+ }
19
+ if (typeof clientId === 'object' && clientId.clientId == null) {
20
+ throw new AuthManagerError('oidc.client.client-id');
21
+ }
22
+ // @TODO Add support for any domain (not just registered services)
23
+ const security = makeSecurityHelper(context);
24
+ const url = cfg.discoveryUrl
25
+ ?? security.makeUrl(context.cfg.services[cfg.service], cfg.basePath);
26
+ return await client.discovery(new URL(url), cfg.idOverride ?? (typeof clientId === 'string' ? clientId : clientId.clientId), cfg.secret, undefined, {
27
+ execute: [
28
+ // @TODO Properly handle it with the config
29
+ client.allowInsecureRequests
30
+ ]
31
+ });
32
+ },
33
+ getClient: async (clientId) => {
34
+ let params;
35
+ let descriptor = null;
36
+ let _clientId;
37
+ if (clientId instanceof Configuration) {
38
+ descriptor = clientId;
39
+ _clientId = params = clientId.serverMetadata().issuer;
40
+ }
41
+ else if (typeof clientId === 'string') {
42
+ _clientId = params = clientId;
43
+ }
44
+ else {
45
+ params = clientId;
46
+ _clientId = params.clientId;
47
+ }
48
+ let metadata = await descriptor?.serverMetadata();
49
+ // @TODO Do not forget to delete it
50
+ if (_clientId == null) {
51
+ throw new AuthManagerError('oidc.client.client-id');
52
+ }
53
+ descriptor ??= await service.getConfiguration(params);
54
+ const cfg = await service.getConfig(params);
55
+ if (cfg?.secret == null) {
56
+ throw new AuthManagerError('oidc.client.secert');
57
+ }
58
+ metadata ??= await descriptor.serverMetadata();
59
+ // return new issuer.Client({ client_id: _clientId, client_secret: cfg?.secret })
60
+ return {
61
+ getMetadata: () => metadata,
62
+ getClientId: () => cfg.idOverride ?? _clientId,
63
+ getConfig: () => cfg,
64
+ makeAuthUrl: params => client.buildAuthorizationUrl(descriptor, params).toString(),
65
+ // grantWithCredentials: async () => client.clientCredentialsGrant(descriptor, { grant_type: 'client_credentials' }),
66
+ grantWithCredentials: async () => client.clientCredentialsGrant(descriptor),
67
+ grantWithCode: async (url, checks, params) => {
68
+ const urlObj = new URL(url);
69
+ Object.entries(params).forEach(([key, value]) => {
70
+ if (key === 'flow') {
71
+ return;
72
+ }
73
+ urlObj.searchParams.set(key, value);
74
+ });
75
+ checks.idTokenExpected ??= true;
76
+ return await client.authorizationCodeGrant(descriptor, urlObj, checks);
77
+ },
78
+ refresh: async (tokenSet) => {
79
+ const refreshToken = typeof tokenSet === 'string' ? tokenSet : tokenSet.refresh_token;
80
+ if (refreshToken == null) {
81
+ throw new AuthManagerError('refresh-token');
82
+ }
83
+ return await client.refreshTokenGrant(descriptor, refreshToken);
84
+ },
85
+ introspect: async (tokenSet, type = 'access_token') => await client.tokenIntrospection(descriptor, tokenSet[type]),
86
+ };
87
+ },
88
+ getConfig: async (clientId) => {
89
+ const context = assertContext(service.ctx, alias);
90
+ if (typeof clientId === 'object' && clientId.clientId == null) {
91
+ throw new AuthManagerError('oidc.client.client-id');
92
+ }
93
+ return context.cfg.oidc.providers?.find(consumer => {
94
+ if (typeof clientId === 'string') {
95
+ return consumer.clientId === clientId;
96
+ }
97
+ return Object.entries(clientId).every(([key, value]) => consumer[key] === value);
98
+ });
99
+ },
100
+ getDefault: () => {
101
+ const context = assertContext(service.ctx, alias);
102
+ return context.cfg.oidc.providers?.find(consumer => consumer.def)?.clientId;
103
+ },
104
+ providerApi: () => {
105
+ const context = assertContext(service.ctx, alias);
106
+ const cfg = context.cfg.oidc;
107
+ const providerApiService = cfg.providerApiService ?? DEF_OIDC_PROVIDER_API;
108
+ if (context.hasService(providerApiService)) {
109
+ return context.service(providerApiService);
110
+ }
111
+ return null;
112
+ },
113
+ accountLinking: () => {
114
+ const context = assertContext(service.ctx, alias);
115
+ const cfg = context.cfg.oidc;
116
+ const accountLinkingService = cfg.accountLinkingService ?? DEF_OIDC_ACCOUNT_LINKING;
117
+ if (context.hasService(accountLinkingService)) {
118
+ return context.service(accountLinkingService);
119
+ }
120
+ return null;
121
+ },
122
+ hasProvider: params => {
123
+ const ctx = service.assertCtx();
124
+ if (ctx.cfg.oidc.providers == null) {
125
+ ctx.cfg.oidc.providers = [];
126
+ }
127
+ return ctx.cfg.oidc.providers.some(provider => {
128
+ if (typeof params === 'string') {
129
+ return provider.clientId === params;
130
+ }
131
+ return Object.entries(params).every(([key, value]) => provider[key] === value);
132
+ });
133
+ },
134
+ registerTemporaryProvider: config => {
135
+ const ctx = service.assertCtx();
136
+ if (ctx.cfg.oidc.providers == null) {
137
+ ctx.cfg.oidc.providers = [];
138
+ }
139
+ const providers = ctx.cfg.oidc.providers;
140
+ let provider = providers.find(provider => matchCriteria.every(key => provider[key] === config[key]));
141
+ if (provider == null) {
142
+ provider = { ...config, [_configFlag]: 0 };
143
+ providers.push(provider);
144
+ }
145
+ else {
146
+ Object.assign(provider, config);
147
+ provider[_configFlag] ??= 0;
148
+ provider[_configFlag]++;
149
+ }
150
+ return provider;
151
+ },
152
+ entityToClientId: params => {
153
+ const ctx = service.assertCtx();
154
+ if (ctx.cfg.oidc.providers == null) {
155
+ ctx.cfg.oidc.providers = [];
156
+ }
157
+ const provider = ctx.cfg.oidc.providers.find(provider => Object.entries(params).every(([key, value]) => provider[key] === value));
158
+ if (provider == null) {
159
+ throw new AuthManagerError('oidc.client.entity-id');
160
+ }
161
+ return provider.clientId;
162
+ },
163
+ unregisterTemporaryProvider: params => {
164
+ const ctx = service.assertCtx();
165
+ if (ctx.cfg.oidc.providers == null) {
166
+ ctx.cfg.oidc.providers = [];
167
+ }
168
+ const providers = ctx.cfg.oidc.providers;
169
+ const idx = providers.findIndex(provider => matchCriteria.every(key => !(key in params) ||
170
+ provider[key] === params[key]));
171
+ if (idx < 0) {
172
+ return;
173
+ }
174
+ const provider = providers[idx];
175
+ if (--provider[_configFlag] < 1) {
176
+ providers.splice(idx, 1);
177
+ }
178
+ }
179
+ });
180
+ return service;
181
+ };
182
+ const matchCriteria = [
183
+ 'clientId', 'service', 'targetService', 'basePath', 'entityId'
184
+ ];
185
+ const _configFlag = Symbol('temporary-oidc-proivder-config');
186
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { InitializedService } from '@owlmeans/context';
2
+ import type { AuthorizationCodeGrantChecks, Configuration, IntrospectionResponse, ServerMetadata, TokenEndpointResponse, TokenEndpointResponseHelpers } from 'openid-client';
3
+ import type { ServerConfig, ServerContext } from '@owlmeans/server-context';
4
+ import type { OidcProviderConfig, OidcSharedConfig, WithSharedConfig, ProviderProfileDetails, OidcUserDetails, OidcProviderSettings } from '@owlmeans/oidc';
5
+ import type { AuthCredentials, AuthPayload, Profile } from '@owlmeans/auth';
6
+ export type OidcClientDescriptor = Configuration;
7
+ export type TokenSet = TokenEndpointResponse & TokenEndpointResponseHelpers;
8
+ export type TokenSetParameters = TokenEndpointResponse;
9
+ export interface OidcClientService extends InitializedService {
10
+ getConfiguration: (clientId: string | Partial<OidcProviderConfig>) => Promise<OidcClientDescriptor>;
11
+ getClient: (clientId: string | OidcClientDescriptor | Partial<OidcProviderConfig>) => Promise<OidcClientAdapter>;
12
+ getConfig: (clientId: string | Partial<OidcProviderConfig>) => Promise<OidcProviderConfig | undefined>;
13
+ getDefault: () => string | undefined;
14
+ registerTemporaryProvider: (config: OidcProviderConfig) => OidcProviderConfig;
15
+ unregisterTemporaryProvider: (params: Partial<OidcProviderConfig>) => void;
16
+ hasProvider: (params: Partial<OidcProviderConfig>) => boolean;
17
+ entityToClientId: (params: Partial<OidcProviderConfig>) => string;
18
+ providerApi: () => ProviderApiService | null;
19
+ accountLinking: () => AccountLinkingService | null;
20
+ }
21
+ export interface OidcClientAdapter {
22
+ getMetadata: () => ServerMetadata;
23
+ getClientId: () => string;
24
+ getConfig: () => OidcProviderConfig;
25
+ makeAuthUrl: (params: Record<string, string>) => string;
26
+ grantWithCredentials: () => Promise<TokenSet>;
27
+ grantWithCode: (currentUrl: string, checks: AuthorizationCodeGrantChecks, params: Record<string, string>) => Promise<TokenSet>;
28
+ refresh: (tokenSet: TokenSetParameters | string) => Promise<TokenSetParameters>;
29
+ introspect: (tokenSet: TokenSetParameters, type?: string) => Promise<IntrospectionResponse>;
30
+ }
31
+ export interface OidcRpConfig extends OidcSharedConfig {
32
+ accountLinkingService?: string;
33
+ providerApiService?: string;
34
+ }
35
+ export interface Config extends ServerConfig, WithSharedConfig {
36
+ oidc: OidcRpConfig;
37
+ }
38
+ export interface Context<C extends Config = Config> extends ServerContext<C> {
39
+ }
40
+ export interface AccountLinkingService extends InitializedService {
41
+ getLinkedProfile: (details: ProviderProfileDetails) => Promise<AuthPayload | null>;
42
+ linkProfile: (details: ProviderProfileDetails, meta: AccountMeta) => Promise<AuthPayload>;
43
+ linkCredentials: (details: ProviderProfileDetails) => Promise<AuthPayload>;
44
+ getOwnerProfiles: (entityId: string) => Promise<Profile[]>;
45
+ getOwnerCredentials: (userId: string, entityId?: string, type?: string) => Promise<AuthCredentials | undefined>;
46
+ }
47
+ export interface AccountMeta {
48
+ username: string;
49
+ force?: boolean;
50
+ }
51
+ export interface ProviderApiService extends InitializedService {
52
+ getUserDetails: (token: string, userId: string) => Promise<OidcUserDetails>;
53
+ getSettings: (token: string, realm: string) => Promise<OidcProviderSettings>;
54
+ }
55
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/build/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { AuthCredentials } from '@owlmeans/auth';
2
+ import type { Config, Context, TokenSet } from '../types.js';
3
+ import type { OidcProviderConfig } from '@owlmeans/oidc';
4
+ export declare const makeOidcAuthentication: <C extends Config, T extends Context<C>>(context: T) => (credential: AuthCredentials) => Promise<[OidcProviderConfig, TokenSet, string]>;
5
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAqB,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AASxD,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,kBACpE,eAAe,KAAG,OAAO,CAAC,CAAC,kBAAkB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAqDlF,CAAA"}
@@ -0,0 +1,48 @@
1
+ import { AuthenFailed, AuthenPayloadError } from '@owlmeans/auth';
2
+ import Url from 'url';
3
+ import { cache, exchangeId, verifierId } from './cache.js';
4
+ import { DEFAULT_ALIAS } from '../consts.js';
5
+ import { base64 } from '@scure/base';
6
+ import { randomBytes } from '@noble/hashes/utils';
7
+ import { AUTHEN_TIMEFRAME } from '@owlmeans/server-auth';
8
+ export const makeOidcAuthentication = (context) => async (credential) => {
9
+ console.log('Challenge we got: ', credential.challenge);
10
+ const challengeParts = credential.challenge.split(':http');
11
+ // This is ex. source - url we were going to return user to after all it happens
12
+ const redirectUrl = challengeParts[0];
13
+ // This is the auth service url with all necessary parameters that
14
+ // we sent user to for authentication.
15
+ const challengeUrl = new Url.URL('http' + challengeParts[1]);
16
+ const challenge = challengeUrl.searchParams.get('code_challenge');
17
+ if (challenge == null) {
18
+ throw new AuthenPayloadError('code_challenge');
19
+ }
20
+ console.log("\n\nWe are picking verifier by id: ", verifierId(challenge));
21
+ const verification = await cache(context).pick(verifierId(challenge));
22
+ console.log("Verification we get: ", verification, "\n\n");
23
+ if (verification.verifier == null) {
24
+ throw new AuthenFailed();
25
+ }
26
+ if (verification.client == null) {
27
+ throw new AuthenFailed();
28
+ }
29
+ const oidc = context.service(DEFAULT_ALIAS);
30
+ console.log(">>>>>>>> client we are trying to extract: ", verification);
31
+ const cfg = await oidc.getConfig({
32
+ clientId: verification.client,
33
+ ...(verification.entityId != null ? { entityId: verification.entityId } : {})
34
+ });
35
+ if (cfg == null) {
36
+ throw new AuthenFailed();
37
+ }
38
+ const client = await oidc.getClient(cfg);
39
+ const tokenSet = await client.grantWithCode(redirectUrl, { pkceCodeVerifier: verification.verifier }, {
40
+ ...Object.fromEntries(new Url.URLSearchParams(credential.credential).entries()),
41
+ });
42
+ // const params = client.callbackParams('/?' + credential.credential)
43
+ // const tokenSet = await client.callback(redirectUrl, params, { code_verifier: verification.verifier })
44
+ const exchangeToken = base64.encode(randomBytes(32));
45
+ await cache(context).create({ id: exchangeId(exchangeToken), payload: tokenSet }, { ttl: AUTHEN_TIMEFRAME / 1000 });
46
+ return [cfg, tokenSet, exchangeToken];
47
+ };
48
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Resource } from '@owlmeans/resource';
2
+ import type { OIDCAuthCache } from './types.js';
3
+ import type { Config, Context } from '../types.js';
4
+ export declare const cache: <C extends Config, T extends Context<C>>(context: T) => Resource<OIDCAuthCache>;
5
+ export declare const verifierId: (challenge: string) => string;
6
+ export declare const exchangeId: (exchange: string) => string;
7
+ export declare const managedId: (token: string) => string;
8
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAG,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAInD,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,KAAG,QAAQ,CAAC,aAAa,CAC1C,CAAA;AAEvD,eAAO,MAAM,UAAU,cAAe,MAAM,WAAgD,CAAA;AAC5F,eAAO,MAAM,UAAU,aAAc,MAAM,WAA+C,CAAA;AAC1F,eAAO,MAAM,SAAS,UAAW,MAAM,WAAyC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { AUTH_CACHE } from '@owlmeans/server-auth';
2
+ import { OIDC_TOKEN_STORE } from '../consts.js';
3
+ export const cache = (context) => context.resource(AUTH_CACHE);
4
+ export const verifierId = (challenge) => `${OIDC_TOKEN_STORE}:verifier:${challenge}`;
5
+ export const exchangeId = (exchange) => `${OIDC_TOKEN_STORE}:exchange:${exchange}`;
6
+ export const managedId = (token) => `${OIDC_TOKEN_STORE}:token:${token}`;
7
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAyC,OAAU,EAA2B,EAAE,CACnG,OAAO,CAAC,QAAQ,CAA0B,UAAU,CAAC,CAAA;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,GAAG,gBAAgB,aAAa,SAAS,EAAE,CAAA;AAC5F,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,GAAG,gBAAgB,aAAa,QAAQ,EAAE,CAAA;AAC1F,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,gBAAgB,UAAU,KAAK,EAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './cache.js';
2
+ export type * from './types.js';
3
+ export * from './auth.js';
4
+ export * from './wrapped.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAC1B,mBAAmB,YAAY,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './cache.js';
2
+ export * from './auth.js';
3
+ export * from './wrapped.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAE1B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { AuthSpent } from '@owlmeans/server-auth';
2
+ import type { TokenSetParameters } from '../types.js';
3
+ export interface OIDCAuthCache extends AuthSpent {
4
+ verifier?: string;
5
+ payload?: TokenSetParameters;
6
+ client?: string;
7
+ validated?: Date;
8
+ entityId?: string;
9
+ }
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { WrappedOIDCService } from '@owlmeans/oidc';
2
+ import type { Context } from '../types.js';
3
+ export declare const wrapper: (context: Context) => WrappedOIDCService;
4
+ //# sourceMappingURL=wrapped.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapped.d.ts","sourceRoot":"","sources":["../../src/utils/wrapped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,OAAO,YAAa,OAAO,KAAG,kBACZ,CAAA"}