@mcp-abap-adt/auth-providers 2.2.2 → 4.0.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.
- package/CHANGELOG.md +193 -0
- package/README.md +825 -64
- package/dist/__tests__/integration/stand/formLogin.d.ts +68 -0
- package/dist/__tests__/integration/stand/formLogin.d.ts.map +1 -0
- package/dist/__tests__/integration/stand/formLogin.js +194 -0
- package/dist/auth/callbackServer.js +2 -2
- package/dist/auth/passcodeAuth.d.ts +25 -0
- package/dist/auth/passcodeAuth.d.ts.map +1 -0
- package/dist/auth/passcodeAuth.js +62 -0
- package/dist/auth/saml2Auth.d.ts +6 -2
- package/dist/auth/saml2Auth.d.ts.map +1 -1
- package/dist/auth/saml2Auth.js +9 -20
- package/dist/auth/samlBearerAssertion.d.ts +24 -0
- package/dist/auth/samlBearerAssertion.d.ts.map +1 -0
- package/dist/auth/samlBearerAssertion.js +102 -0
- package/dist/auth/strictXml.d.ts +13 -0
- package/dist/auth/strictXml.d.ts.map +1 -0
- package/dist/auth/strictXml.js +21 -0
- package/dist/errors/AssertionValidationError.d.ts +15 -0
- package/dist/errors/AssertionValidationError.d.ts.map +1 -0
- package/dist/errors/AssertionValidationError.js +24 -0
- package/dist/errors/TokenProviderErrors.d.ts +2 -0
- package/dist/errors/TokenProviderErrors.d.ts.map +1 -1
- package/dist/errors/TokenProviderErrors.js +3 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -2
- package/dist/providers/Saml2BearerProvider.d.ts +1 -0
- package/dist/providers/Saml2BearerProvider.d.ts.map +1 -1
- package/dist/providers/Saml2BearerProvider.js +20 -2
- package/dist/providers/Saml2PureProvider.d.ts +1 -0
- package/dist/providers/Saml2PureProvider.d.ts.map +1 -1
- package/dist/providers/Saml2PureProvider.js +19 -5
- package/dist/providers/UaaPasscodeProvider.d.ts +43 -0
- package/dist/providers/UaaPasscodeProvider.d.ts.map +1 -0
- package/dist/providers/UaaPasscodeProvider.js +86 -0
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -3
- package/dist/providers/saml2Utils.d.ts +49 -2
- package/dist/providers/saml2Utils.d.ts.map +1 -1
- package/dist/providers/saml2Utils.js +94 -2
- package/dist/strategies/index.d.ts +1 -1
- package/dist/strategies/index.d.ts.map +1 -1
- package/dist/strategies/index.js +2 -1
- package/dist/strategies/manualStrategies.d.ts +7 -0
- package/dist/strategies/manualStrategies.d.ts.map +1 -1
- package/dist/strategies/manualStrategies.js +21 -0
- package/dist/validation/assertionValidator.d.ts +28 -0
- package/dist/validation/assertionValidator.d.ts.map +1 -0
- package/dist/validation/assertionValidator.js +444 -0
- package/dist/validation/documentIds.d.ts +15 -0
- package/dist/validation/documentIds.d.ts.map +1 -0
- package/dist/validation/documentIds.js +32 -0
- package/dist/validation/inMemoryReplayStore.d.ts +22 -0
- package/dist/validation/inMemoryReplayStore.d.ts.map +1 -0
- package/dist/validation/inMemoryReplayStore.js +49 -0
- package/dist/validation/signedNode.d.ts +54 -0
- package/dist/validation/signedNode.d.ts.map +1 -0
- package/dist/validation/signedNode.js +171 -0
- package/dist/validation/xsdDateTime.d.ts +17 -0
- package/dist/validation/xsdDateTime.d.ts.map +1 -0
- package/dist/validation/xsdDateTime.js +67 -0
- package/package.json +14 -8
- package/bin/auth-device-flow.ts +0 -114
- package/dist/auth/deviceFlowAuth.d.ts +0 -43
- package/dist/auth/deviceFlowAuth.d.ts.map +0 -1
- package/dist/auth/deviceFlowAuth.js +0 -168
- package/dist/providers/DeviceFlowProvider.d.ts +0 -32
- package/dist/providers/DeviceFlowProvider.d.ts.map +0 -1
- package/dist/providers/DeviceFlowProvider.js +0 -86
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* An assertion was refused, and by which check.
|
|
4
|
+
*
|
|
5
|
+
* The check is a field rather than something to read out of the message: a
|
|
6
|
+
* consumer telling "your identity provider declined" from "this was not
|
|
7
|
+
* addressed to us" should not be parsing prose to do it.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.AssertionValidationError = void 0;
|
|
11
|
+
const interfaces_auth_1 = require("@mcp-abap-adt/interfaces-auth");
|
|
12
|
+
const TokenProviderErrors_1 = require("./TokenProviderErrors");
|
|
13
|
+
class AssertionValidationError extends TokenProviderErrors_1.TokenProviderError {
|
|
14
|
+
check;
|
|
15
|
+
constructor(check, message) {
|
|
16
|
+
super(message, interfaces_auth_1.ASSERTION_ERROR_CODES.VALIDATION_ERROR);
|
|
17
|
+
this.name = 'AssertionValidationError';
|
|
18
|
+
this.check = check;
|
|
19
|
+
// Every sibling in TokenProviderErrors.ts does this; without it
|
|
20
|
+
// `instanceof` fails across a compiled boundary.
|
|
21
|
+
Object.setPrototypeOf(this, AssertionValidationError.prototype);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.AssertionValidationError = AssertionValidationError;
|
|
@@ -46,4 +46,6 @@ export declare class BrowserAuthError extends TokenProviderError {
|
|
|
46
46
|
readonly cause?: Error | undefined;
|
|
47
47
|
constructor(message: string, cause?: Error | undefined);
|
|
48
48
|
}
|
|
49
|
+
export type { AssertionCheck } from './AssertionValidationError';
|
|
50
|
+
export { AssertionValidationError } from './AssertionValidationError';
|
|
49
51
|
//# sourceMappingURL=TokenProviderErrors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenProviderErrors.d.ts","sourceRoot":"","sources":["../../src/errors/TokenProviderErrors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAM/B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;aAGnC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,kBAAkB;aAGhC,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAMhC;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;aAGpC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;aAGnC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;aAGpC,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAMhC"}
|
|
1
|
+
{"version":3,"file":"TokenProviderErrors.d.ts","sourceRoot":"","sources":["../../src/errors/TokenProviderErrors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAM/B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;aAGnC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,kBAAkB;aAGhC,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAMhC;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;aAGpC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,kBAAkB;aAGnC,aAAa,CAAC,EAAE,MAAM,EAAE;gBADxC,OAAO,EAAE,MAAM,EACC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;aAGpC,KAAK,CAAC,EAAE,KAAK;gBAD7B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,KAAK,YAAA;CAMhC;AAED,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* to enable better error handling and debugging.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.BrowserAuthError = exports.ServiceKeyError = exports.SessionDataError = exports.RefreshError = exports.ValidationError = exports.TokenProviderError = void 0;
|
|
9
|
+
exports.AssertionValidationError = exports.BrowserAuthError = exports.ServiceKeyError = exports.SessionDataError = exports.RefreshError = exports.ValidationError = exports.TokenProviderError = void 0;
|
|
10
10
|
const interfaces_auth_1 = require("@mcp-abap-adt/interfaces-auth");
|
|
11
11
|
/**
|
|
12
12
|
* Base class for all token provider errors
|
|
@@ -86,3 +86,5 @@ class BrowserAuthError extends TokenProviderError {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
exports.BrowserAuthError = BrowserAuthError;
|
|
89
|
+
var AssertionValidationError_1 = require("./AssertionValidationError");
|
|
90
|
+
Object.defineProperty(exports, "AssertionValidationError", { enumerable: true, get: function () { return AssertionValidationError_1.AssertionValidationError; } });
|
package/dist/index.d.ts
CHANGED
|
@@ -8,11 +8,14 @@ export { withBrowserCallbackServer } from './auth/callbackServer';
|
|
|
8
8
|
export type { OidcCallbackResult } from './auth/oidcBrowserAuth';
|
|
9
9
|
export { withOidcCallbackServer } from './auth/oidcBrowserAuth';
|
|
10
10
|
export { withSamlCallbackServer } from './auth/saml2Auth';
|
|
11
|
+
export { type AssertionCheck, AssertionValidationError, } from './errors/AssertionValidationError';
|
|
11
12
|
export { BrowserAuthError, RefreshError, ServiceKeyError, SessionDataError, TokenProviderError, ValidationError, } from './errors/TokenProviderErrors';
|
|
12
|
-
export type { AuthorizationCodeProviderConfig, ClientCredentialsProviderConfig,
|
|
13
|
-
export { AuthorizationCodeProvider, BaseTokenProvider, ClientCredentialsProvider,
|
|
13
|
+
export type { AuthorizationCodeProviderConfig, ClientCredentialsProviderConfig, OidcBrowserProviderConfig, OidcDeviceFlowProviderConfig, OidcPasswordProviderConfig, OidcTokenExchangeProviderConfig, Saml2BearerProviderConfig, Saml2PureProviderConfig, UaaPasscodeProviderConfig, } from './providers';
|
|
14
|
+
export { AuthorizationCodeProvider, BaseTokenProvider, ClientCredentialsProvider, OidcBrowserProvider, OidcDeviceFlowProvider, OidcPasswordProvider, OidcTokenExchangeProvider, Saml2BearerProvider, Saml2PureProvider, UaaPasscodeProvider, } from './providers';
|
|
14
15
|
export { SsoProviderFactory } from './sso/SsoProviderFactory';
|
|
15
16
|
export type { SsoProviderConfig, SsoProviderInstance } from './sso/types';
|
|
16
17
|
export type { BrowserCallbackStrategyOptions, CallbackStrategyOptions, ExternalCodeStrategyOptions, ManualStrategyOptions, StaticCodeStrategyOptions, } from './strategies';
|
|
17
|
-
export { asOidcResult, BrowserCallbackStrategy, browserCallbackStrategy, DEFAULT_CALLBACK_PORT, DEFAULT_LOGIN_TIMEOUT_MS, externalCodeStrategy, manualPasteStrategy, manualSamlResponseStrategy, oidcCallbackStrategy, samlCallbackStrategy, staticCodeStrategy, } from './strategies';
|
|
18
|
+
export { asOidcResult, BrowserCallbackStrategy, browserCallbackStrategy, DEFAULT_CALLBACK_PORT, DEFAULT_LOGIN_TIMEOUT_MS, externalCodeStrategy, manualPasscodeStrategy, manualPasteStrategy, manualSamlResponseStrategy, oidcCallbackStrategy, samlCallbackStrategy, staticCodeStrategy, } from './strategies';
|
|
19
|
+
export { createSignedAssertionValidator, createSignedResponseValidator, type ShippedValidatorOptions, } from './validation/assertionValidator';
|
|
20
|
+
export { createInMemoryReplayStore, defaultReplayStore, } from './validation/inMemoryReplayStore';
|
|
18
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,+BAA+B,EAC/B,+BAA+B,EAC/B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EACL,KAAK,cAAc,EACnB,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,+BAA+B,EAC/B,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC1E,YAAY,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,2BAA2B,EAC3B,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,kCAAkC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Provides token providers
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.staticCodeStrategy = exports.samlCallbackStrategy = exports.oidcCallbackStrategy = exports.manualSamlResponseStrategy = exports.manualPasteStrategy = exports.externalCodeStrategy = exports.DEFAULT_LOGIN_TIMEOUT_MS = exports.DEFAULT_CALLBACK_PORT = exports.browserCallbackStrategy = exports.BrowserCallbackStrategy = exports.asOidcResult = exports.SsoProviderFactory = exports.Saml2PureProvider = exports.Saml2BearerProvider = exports.OidcTokenExchangeProvider = exports.OidcPasswordProvider = exports.OidcDeviceFlowProvider = exports.OidcBrowserProvider = exports.
|
|
9
|
+
exports.defaultReplayStore = exports.createInMemoryReplayStore = exports.createSignedResponseValidator = exports.createSignedAssertionValidator = exports.staticCodeStrategy = exports.samlCallbackStrategy = exports.oidcCallbackStrategy = exports.manualSamlResponseStrategy = exports.manualPasteStrategy = exports.manualPasscodeStrategy = exports.externalCodeStrategy = exports.DEFAULT_LOGIN_TIMEOUT_MS = exports.DEFAULT_CALLBACK_PORT = exports.browserCallbackStrategy = exports.BrowserCallbackStrategy = exports.asOidcResult = exports.SsoProviderFactory = exports.UaaPasscodeProvider = exports.Saml2PureProvider = exports.Saml2BearerProvider = exports.OidcTokenExchangeProvider = exports.OidcPasswordProvider = exports.OidcDeviceFlowProvider = exports.OidcBrowserProvider = exports.ClientCredentialsProvider = exports.BaseTokenProvider = exports.AuthorizationCodeProvider = exports.ValidationError = exports.TokenProviderError = exports.SessionDataError = exports.ServiceKeyError = exports.RefreshError = exports.BrowserAuthError = exports.AssertionValidationError = exports.withSamlCallbackServer = exports.withOidcCallbackServer = exports.withBrowserCallbackServer = void 0;
|
|
10
10
|
// Callback server factories — "take the transport this package gives".
|
|
11
11
|
var callbackServer_1 = require("./auth/callbackServer");
|
|
12
12
|
Object.defineProperty(exports, "withBrowserCallbackServer", { enumerable: true, get: function () { return callbackServer_1.withBrowserCallbackServer; } });
|
|
@@ -15,6 +15,8 @@ Object.defineProperty(exports, "withOidcCallbackServer", { enumerable: true, get
|
|
|
15
15
|
var saml2Auth_1 = require("./auth/saml2Auth");
|
|
16
16
|
Object.defineProperty(exports, "withSamlCallbackServer", { enumerable: true, get: function () { return saml2Auth_1.withSamlCallbackServer; } });
|
|
17
17
|
// Errors
|
|
18
|
+
var AssertionValidationError_1 = require("./errors/AssertionValidationError");
|
|
19
|
+
Object.defineProperty(exports, "AssertionValidationError", { enumerable: true, get: function () { return AssertionValidationError_1.AssertionValidationError; } });
|
|
18
20
|
var TokenProviderErrors_1 = require("./errors/TokenProviderErrors");
|
|
19
21
|
Object.defineProperty(exports, "BrowserAuthError", { enumerable: true, get: function () { return TokenProviderErrors_1.BrowserAuthError; } });
|
|
20
22
|
Object.defineProperty(exports, "RefreshError", { enumerable: true, get: function () { return TokenProviderErrors_1.RefreshError; } });
|
|
@@ -27,13 +29,13 @@ var providers_1 = require("./providers");
|
|
|
27
29
|
Object.defineProperty(exports, "AuthorizationCodeProvider", { enumerable: true, get: function () { return providers_1.AuthorizationCodeProvider; } });
|
|
28
30
|
Object.defineProperty(exports, "BaseTokenProvider", { enumerable: true, get: function () { return providers_1.BaseTokenProvider; } });
|
|
29
31
|
Object.defineProperty(exports, "ClientCredentialsProvider", { enumerable: true, get: function () { return providers_1.ClientCredentialsProvider; } });
|
|
30
|
-
Object.defineProperty(exports, "DeviceFlowProvider", { enumerable: true, get: function () { return providers_1.DeviceFlowProvider; } });
|
|
31
32
|
Object.defineProperty(exports, "OidcBrowserProvider", { enumerable: true, get: function () { return providers_1.OidcBrowserProvider; } });
|
|
32
33
|
Object.defineProperty(exports, "OidcDeviceFlowProvider", { enumerable: true, get: function () { return providers_1.OidcDeviceFlowProvider; } });
|
|
33
34
|
Object.defineProperty(exports, "OidcPasswordProvider", { enumerable: true, get: function () { return providers_1.OidcPasswordProvider; } });
|
|
34
35
|
Object.defineProperty(exports, "OidcTokenExchangeProvider", { enumerable: true, get: function () { return providers_1.OidcTokenExchangeProvider; } });
|
|
35
36
|
Object.defineProperty(exports, "Saml2BearerProvider", { enumerable: true, get: function () { return providers_1.Saml2BearerProvider; } });
|
|
36
37
|
Object.defineProperty(exports, "Saml2PureProvider", { enumerable: true, get: function () { return providers_1.Saml2PureProvider; } });
|
|
38
|
+
Object.defineProperty(exports, "UaaPasscodeProvider", { enumerable: true, get: function () { return providers_1.UaaPasscodeProvider; } });
|
|
37
39
|
// SSO factory
|
|
38
40
|
var SsoProviderFactory_1 = require("./sso/SsoProviderFactory");
|
|
39
41
|
Object.defineProperty(exports, "SsoProviderFactory", { enumerable: true, get: function () { return SsoProviderFactory_1.SsoProviderFactory; } });
|
|
@@ -45,8 +47,17 @@ Object.defineProperty(exports, "browserCallbackStrategy", { enumerable: true, ge
|
|
|
45
47
|
Object.defineProperty(exports, "DEFAULT_CALLBACK_PORT", { enumerable: true, get: function () { return strategies_1.DEFAULT_CALLBACK_PORT; } });
|
|
46
48
|
Object.defineProperty(exports, "DEFAULT_LOGIN_TIMEOUT_MS", { enumerable: true, get: function () { return strategies_1.DEFAULT_LOGIN_TIMEOUT_MS; } });
|
|
47
49
|
Object.defineProperty(exports, "externalCodeStrategy", { enumerable: true, get: function () { return strategies_1.externalCodeStrategy; } });
|
|
50
|
+
Object.defineProperty(exports, "manualPasscodeStrategy", { enumerable: true, get: function () { return strategies_1.manualPasscodeStrategy; } });
|
|
48
51
|
Object.defineProperty(exports, "manualPasteStrategy", { enumerable: true, get: function () { return strategies_1.manualPasteStrategy; } });
|
|
49
52
|
Object.defineProperty(exports, "manualSamlResponseStrategy", { enumerable: true, get: function () { return strategies_1.manualSamlResponseStrategy; } });
|
|
50
53
|
Object.defineProperty(exports, "oidcCallbackStrategy", { enumerable: true, get: function () { return strategies_1.oidcCallbackStrategy; } });
|
|
51
54
|
Object.defineProperty(exports, "samlCallbackStrategy", { enumerable: true, get: function () { return strategies_1.samlCallbackStrategy; } });
|
|
52
55
|
Object.defineProperty(exports, "staticCodeStrategy", { enumerable: true, get: function () { return strategies_1.staticCodeStrategy; } });
|
|
56
|
+
// SAML assertion validation — the two shipped validators and the replay store,
|
|
57
|
+
// or bring your own IAssertionValidator / IAssertionReplayStore.
|
|
58
|
+
var assertionValidator_1 = require("./validation/assertionValidator");
|
|
59
|
+
Object.defineProperty(exports, "createSignedAssertionValidator", { enumerable: true, get: function () { return assertionValidator_1.createSignedAssertionValidator; } });
|
|
60
|
+
Object.defineProperty(exports, "createSignedResponseValidator", { enumerable: true, get: function () { return assertionValidator_1.createSignedResponseValidator; } });
|
|
61
|
+
var inMemoryReplayStore_1 = require("./validation/inMemoryReplayStore");
|
|
62
|
+
Object.defineProperty(exports, "createInMemoryReplayStore", { enumerable: true, get: function () { return inMemoryReplayStore_1.createInMemoryReplayStore; } });
|
|
63
|
+
Object.defineProperty(exports, "defaultReplayStore", { enumerable: true, get: function () { return inMemoryReplayStore_1.defaultReplayStore; } });
|
|
@@ -14,6 +14,7 @@ export interface Saml2BearerProviderConfig extends Saml2CommonConfig, Saml2Beare
|
|
|
14
14
|
}
|
|
15
15
|
export declare class Saml2BearerProvider extends BaseTokenProvider {
|
|
16
16
|
private config;
|
|
17
|
+
private readonly validator;
|
|
17
18
|
constructor(config: Saml2BearerProviderConfig);
|
|
18
19
|
protected getAuthType(): OAuth2GrantType;
|
|
19
20
|
protected performLogin(): Promise<ITokenResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saml2BearerProvider.d.ts","sourceRoot":"","sources":["../../src/providers/Saml2BearerProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Saml2BearerProvider.d.ts","sourceRoot":"","sources":["../../src/providers/Saml2BearerProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAEV,YAAY,EACZ,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAM9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAQtB,MAAM,WAAW,yBACf,SAAQ,iBAAiB,EACvB,yBAAyB;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;gBAEpC,MAAM,EAAE,yBAAyB;IAqB7C,SAAS,CAAC,WAAW,IAAI,eAAe;cAIxB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAgCrD;;;;OAIG;cACa,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAqBxD"}
|
|
@@ -8,15 +8,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
8
8
|
exports.Saml2BearerProvider = void 0;
|
|
9
9
|
const interfaces_auth_1 = require("@mcp-abap-adt/interfaces-auth");
|
|
10
10
|
const saml2TokenExchange_1 = require("../auth/saml2TokenExchange");
|
|
11
|
+
const samlBearerAssertion_1 = require("../auth/samlBearerAssertion");
|
|
11
12
|
const BaseTokenProvider_1 = require("./BaseTokenProvider");
|
|
12
13
|
const saml2Utils_1 = require("./saml2Utils");
|
|
13
14
|
class Saml2BearerProvider extends BaseTokenProvider_1.BaseTokenProvider {
|
|
14
15
|
config;
|
|
16
|
+
validator;
|
|
15
17
|
constructor(config) {
|
|
16
18
|
super();
|
|
17
19
|
// A pre-built URL with no declared ACS cannot be verified against whatever
|
|
18
20
|
// the strategy binds, so it is refused here rather than at login time.
|
|
19
21
|
(0, saml2Utils_1.validateSamlConfig)(config);
|
|
22
|
+
// Before anything reaches a browser or a network: a missing certificate is
|
|
23
|
+
// the consumer's mistake, and finding it after a completed login wastes
|
|
24
|
+
// theirs.
|
|
25
|
+
this.validator = (0, saml2Utils_1.resolveAssertionValidator)(config, 'bearer');
|
|
20
26
|
this.config = config;
|
|
21
27
|
this.logger = config.logger;
|
|
22
28
|
if (config.accessToken) {
|
|
@@ -31,9 +37,21 @@ class Saml2BearerProvider extends BaseTokenProvider_1.BaseTokenProvider {
|
|
|
31
37
|
return interfaces_auth_1.AUTH_TYPE_SAML2_BEARER;
|
|
32
38
|
}
|
|
33
39
|
async performLogin() {
|
|
34
|
-
const
|
|
40
|
+
const { payload, requestId, acsUrl } = await (0, saml2Utils_1.getSamlAssertion)(this.config);
|
|
41
|
+
// Validation establishes trust before anything reaches the token
|
|
42
|
+
// endpoint; it does not change what is sent beyond toBearerAssertion's
|
|
43
|
+
// conversion below.
|
|
44
|
+
await this.validator.validate(payload, {
|
|
45
|
+
expectedInResponseTo: requestId,
|
|
46
|
+
audience: this.config.spEntityId,
|
|
47
|
+
acsUrl,
|
|
48
|
+
expectedIssuer: this.config.idpEntityId,
|
|
49
|
+
logger: this.logger,
|
|
50
|
+
});
|
|
35
51
|
const tokenUrl = (0, saml2Utils_1.resolveTokenUrl)(this.config);
|
|
36
|
-
|
|
52
|
+
// RFC 7522 takes one base64url Assertion; a login delivers the whole
|
|
53
|
+
// Response in standard base64, which a conforming endpoint refuses.
|
|
54
|
+
const tokens = await (0, saml2TokenExchange_1.exchangeSamlAssertion)((0, samlBearerAssertion_1.toBearerAssertion)(payload), tokenUrl, this.config.clientId, this.config.clientSecret, this.logger);
|
|
37
55
|
return {
|
|
38
56
|
authorizationToken: tokens.accessToken,
|
|
39
57
|
refreshToken: tokens.refreshToken,
|
|
@@ -13,6 +13,7 @@ export interface Saml2PureProviderConfig extends Saml2CommonConfig {
|
|
|
13
13
|
}
|
|
14
14
|
export declare class Saml2PureProvider extends BaseTokenProvider {
|
|
15
15
|
private config;
|
|
16
|
+
private readonly validator;
|
|
16
17
|
constructor(config: Saml2PureProviderConfig);
|
|
17
18
|
protected getAuthType(): OAuth2GrantType;
|
|
18
19
|
protected performLogin(): Promise<ITokenResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saml2PureProvider.d.ts","sourceRoot":"","sources":["../../src/providers/Saml2PureProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Saml2PureProvider.d.ts","sourceRoot":"","sources":["../../src/providers/Saml2PureProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAEV,YAAY,EACZ,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAOtD,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3D;AAED,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;gBAEpC,MAAM,EAAE,uBAAuB;IAc3C,SAAS,CAAC,WAAW,IAAI,eAAe;cAIxB,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;cAuBrC,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAGxD"}
|
|
@@ -7,16 +7,20 @@
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.Saml2PureProvider = void 0;
|
|
9
9
|
const interfaces_auth_1 = require("@mcp-abap-adt/interfaces-auth");
|
|
10
|
-
const saml2Auth_1 = require("../auth/saml2Auth");
|
|
11
10
|
const BaseTokenProvider_1 = require("./BaseTokenProvider");
|
|
12
11
|
const saml2Utils_1 = require("./saml2Utils");
|
|
13
12
|
class Saml2PureProvider extends BaseTokenProvider_1.BaseTokenProvider {
|
|
14
13
|
config;
|
|
14
|
+
validator;
|
|
15
15
|
constructor(config) {
|
|
16
16
|
super();
|
|
17
17
|
// A pre-built URL with no declared ACS cannot be verified against whatever
|
|
18
18
|
// the strategy binds, so it is refused here rather than at login time.
|
|
19
19
|
(0, saml2Utils_1.validateSamlConfig)(config);
|
|
20
|
+
// Before anything reaches a browser or a network: a missing certificate is
|
|
21
|
+
// the consumer's mistake, and finding it after a completed login wastes
|
|
22
|
+
// theirs.
|
|
23
|
+
this.validator = (0, saml2Utils_1.resolveAssertionValidator)(config, 'pure');
|
|
20
24
|
this.config = config;
|
|
21
25
|
this.logger = config.logger;
|
|
22
26
|
this.tokenType = 'saml';
|
|
@@ -25,14 +29,24 @@ class Saml2PureProvider extends BaseTokenProvider_1.BaseTokenProvider {
|
|
|
25
29
|
return interfaces_auth_1.AUTH_TYPE_USER_TOKEN;
|
|
26
30
|
}
|
|
27
31
|
async performLogin() {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
const { payload, requestId, acsUrl } = await (0, saml2Utils_1.getSamlAssertion)(this.config);
|
|
33
|
+
// acsUrl is where the strategy actually listened — with an ephemeral port
|
|
34
|
+
// the configured value is usually absent and never authoritative.
|
|
35
|
+
const validated = await this.validator.validate(payload, {
|
|
36
|
+
expectedInResponseTo: requestId,
|
|
37
|
+
audience: this.config.spEntityId,
|
|
38
|
+
acsUrl,
|
|
39
|
+
expectedIssuer: this.config.idpEntityId,
|
|
40
|
+
logger: this.logger,
|
|
41
|
+
});
|
|
42
|
+
const sessionCookies = await this.config.cookieProvider(payload);
|
|
31
43
|
return {
|
|
32
44
|
authorizationToken: sessionCookies,
|
|
33
45
|
authType: interfaces_auth_1.AUTH_TYPE_USER_TOKEN,
|
|
34
46
|
tokenType: 'saml',
|
|
35
|
-
expiresAt,
|
|
47
|
+
// ITokenResult.expiresAt is an epoch-ms number, unlike
|
|
48
|
+
// ValidatedAssertion.expiresAt, which is a Date.
|
|
49
|
+
expiresAt: validated.expiresAt.getTime(),
|
|
36
50
|
};
|
|
37
51
|
}
|
|
38
52
|
async performRefresh() {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UAA / XSUAA one-time passcode provider — the login `cf login --sso` uses.
|
|
3
|
+
*
|
|
4
|
+
* Nothing is opened and nothing listens on this machine: the user fetches a
|
|
5
|
+
* code from `<uaaUrl>/passcode` in any browser, anywhere, logging in however
|
|
6
|
+
* the identity zone asks (SSO through a corporate IdP, MFA), and hands it to
|
|
7
|
+
* the strategy. The provider exchanges it for tokens and refreshes them
|
|
8
|
+
* afterwards, so the user is asked again only when the refresh token is gone.
|
|
9
|
+
*/
|
|
10
|
+
import type { IAuthorizationStrategy, ITokenResult, OAuth2GrantType } from '@mcp-abap-adt/interfaces-auth';
|
|
11
|
+
import type { ILogger } from '@mcp-abap-adt/interfaces-utils';
|
|
12
|
+
import { BaseTokenProvider } from './BaseTokenProvider';
|
|
13
|
+
export interface UaaPasscodeProviderConfig {
|
|
14
|
+
/** UAA / XSUAA base URL, e.g. `https://<subdomain>.authentication.<region>.hana.ondemand.com`. */
|
|
15
|
+
uaaUrl: string;
|
|
16
|
+
/** A client allowed the `password` grant; add `refresh_token` to keep the session. */
|
|
17
|
+
clientId: string;
|
|
18
|
+
/** Omitted for a public client, which authenticates with an empty secret. */
|
|
19
|
+
clientSecret?: string;
|
|
20
|
+
/**
|
|
21
|
+
* How the user's code reaches the provider. The strategy is handed
|
|
22
|
+
* `<uaaUrl>/passcode` as the URL to send the user to, and returns the code.
|
|
23
|
+
* Defaults to `manualPasscodeStrategy()`: announce the URL, read the code
|
|
24
|
+
* from the terminal.
|
|
25
|
+
*/
|
|
26
|
+
authorization?: IAuthorizationStrategy<string>;
|
|
27
|
+
accessToken?: string;
|
|
28
|
+
refreshToken?: string;
|
|
29
|
+
logger?: ILogger;
|
|
30
|
+
}
|
|
31
|
+
export declare class UaaPasscodeProvider extends BaseTokenProvider {
|
|
32
|
+
private readonly config;
|
|
33
|
+
constructor(config: UaaPasscodeProviderConfig);
|
|
34
|
+
protected getAuthType(): OAuth2GrantType;
|
|
35
|
+
private get baseUrl();
|
|
36
|
+
protected performLogin(): Promise<ITokenResult>;
|
|
37
|
+
/**
|
|
38
|
+
* A failure is thrown, not handled: BaseTokenProvider drops the refresh
|
|
39
|
+
* token and asks for a new passcode through performLogin().
|
|
40
|
+
*/
|
|
41
|
+
protected performRefresh(): Promise<ITokenResult>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=UaaPasscodeProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UaaPasscodeProvider.d.ts","sourceRoot":"","sources":["../../src/providers/UaaPasscodeProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EACZ,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAI9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,yBAAyB;IACxC,kGAAkG;IAClG,MAAM,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;gBAEvC,MAAM,EAAE,yBAAyB;IAa7C,SAAS,CAAC,WAAW,IAAI,eAAe;IAIxC,OAAO,KAAK,OAAO,GAElB;cAEe,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAqCrD;;;OAGG;cACa,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;CAkBxD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* UAA / XSUAA one-time passcode provider — the login `cf login --sso` uses.
|
|
4
|
+
*
|
|
5
|
+
* Nothing is opened and nothing listens on this machine: the user fetches a
|
|
6
|
+
* code from `<uaaUrl>/passcode` in any browser, anywhere, logging in however
|
|
7
|
+
* the identity zone asks (SSO through a corporate IdP, MFA), and hands it to
|
|
8
|
+
* the strategy. The provider exchanges it for tokens and refreshes them
|
|
9
|
+
* afterwards, so the user is asked again only when the refresh token is gone.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.UaaPasscodeProvider = void 0;
|
|
13
|
+
const interfaces_auth_1 = require("@mcp-abap-adt/interfaces-auth");
|
|
14
|
+
const passcodeAuth_1 = require("../auth/passcodeAuth");
|
|
15
|
+
const tokenRefresher_1 = require("../auth/tokenRefresher");
|
|
16
|
+
const manualStrategies_1 = require("../strategies/manualStrategies");
|
|
17
|
+
const BaseTokenProvider_1 = require("./BaseTokenProvider");
|
|
18
|
+
class UaaPasscodeProvider extends BaseTokenProvider_1.BaseTokenProvider {
|
|
19
|
+
config;
|
|
20
|
+
constructor(config) {
|
|
21
|
+
super();
|
|
22
|
+
this.config = config;
|
|
23
|
+
this.logger = config.logger;
|
|
24
|
+
if (config.accessToken) {
|
|
25
|
+
this.authorizationToken = config.accessToken;
|
|
26
|
+
this.expiresAt = this.parseExpirationFromJWT(config.accessToken);
|
|
27
|
+
}
|
|
28
|
+
if (config.refreshToken) {
|
|
29
|
+
this.refreshToken = config.refreshToken;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
getAuthType() {
|
|
33
|
+
return interfaces_auth_1.AUTH_TYPE_PASSWORD;
|
|
34
|
+
}
|
|
35
|
+
get baseUrl() {
|
|
36
|
+
return this.config.uaaUrl.replace(/\/+$/, '');
|
|
37
|
+
}
|
|
38
|
+
async performLogin() {
|
|
39
|
+
const supplied = this.config.authorization;
|
|
40
|
+
const strategy = supplied ?? (0, manualStrategies_1.manualPasscodeStrategy)();
|
|
41
|
+
let passcode;
|
|
42
|
+
try {
|
|
43
|
+
// The passcode page takes no redirect: the code travels by hand.
|
|
44
|
+
const outcome = await strategy.authorize({
|
|
45
|
+
logger: this.logger,
|
|
46
|
+
buildAuthorizationUrl: async () => `${this.baseUrl}/passcode`,
|
|
47
|
+
});
|
|
48
|
+
passcode = outcome.payload;
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
if (!supplied) {
|
|
52
|
+
await strategy.dispose?.().catch((error) => {
|
|
53
|
+
this.logger?.warn('[UaaPasscodeProvider] dispose failed', {
|
|
54
|
+
error: error instanceof Error ? error.message : String(error),
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const tokens = await (0, passcodeAuth_1.exchangePasscode)(this.baseUrl, this.config.clientId, this.config.clientSecret, passcode, this.logger);
|
|
60
|
+
return {
|
|
61
|
+
authorizationToken: tokens.accessToken,
|
|
62
|
+
refreshToken: tokens.refreshToken,
|
|
63
|
+
authType: interfaces_auth_1.AUTH_TYPE_PASSWORD,
|
|
64
|
+
expiresIn: tokens.expiresIn,
|
|
65
|
+
tokenType: 'jwt',
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A failure is thrown, not handled: BaseTokenProvider drops the refresh
|
|
70
|
+
* token and asks for a new passcode through performLogin().
|
|
71
|
+
*/
|
|
72
|
+
async performRefresh() {
|
|
73
|
+
if (!this.refreshToken) {
|
|
74
|
+
throw new Error('Refresh token is required for refresh');
|
|
75
|
+
}
|
|
76
|
+
const result = await (0, tokenRefresher_1.refreshJwtToken)(this.refreshToken, this.baseUrl, this.config.clientId, this.config.clientSecret ?? '');
|
|
77
|
+
return {
|
|
78
|
+
authorizationToken: result.accessToken,
|
|
79
|
+
refreshToken: result.refreshToken || this.refreshToken,
|
|
80
|
+
authType: interfaces_auth_1.AUTH_TYPE_PASSWORD,
|
|
81
|
+
expiresIn: result.expiresIn,
|
|
82
|
+
tokenType: 'jwt',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.UaaPasscodeProvider = UaaPasscodeProvider;
|
|
@@ -9,8 +9,6 @@ export { AuthorizationCodeProvider } from './AuthorizationCodeProvider';
|
|
|
9
9
|
export { BaseTokenProvider } from './BaseTokenProvider';
|
|
10
10
|
export type { ClientCredentialsProviderConfig } from './ClientCredentialsProvider';
|
|
11
11
|
export { ClientCredentialsProvider } from './ClientCredentialsProvider';
|
|
12
|
-
export type { DeviceFlowProviderConfig } from './DeviceFlowProvider';
|
|
13
|
-
export { DeviceFlowProvider } from './DeviceFlowProvider';
|
|
14
12
|
export type { OidcBrowserProviderConfig } from './OidcBrowserProvider';
|
|
15
13
|
export { OidcBrowserProvider } from './OidcBrowserProvider';
|
|
16
14
|
export type { OidcDeviceFlowProviderConfig } from './OidcDeviceFlowProvider';
|
|
@@ -23,4 +21,6 @@ export type { Saml2BearerProviderConfig } from './Saml2BearerProvider';
|
|
|
23
21
|
export { Saml2BearerProvider } from './Saml2BearerProvider';
|
|
24
22
|
export type { Saml2PureProviderConfig } from './Saml2PureProvider';
|
|
25
23
|
export { Saml2PureProvider } from './Saml2PureProvider';
|
|
24
|
+
export type { UaaPasscodeProviderConfig } from './UaaPasscodeProvider';
|
|
25
|
+
export { UaaPasscodeProvider } from './UaaPasscodeProvider';
|
|
26
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/providers/index.js
CHANGED
|
@@ -6,15 +6,13 @@
|
|
|
6
6
|
* All providers extend BaseTokenProvider and implement ITokenProvider.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.Saml2PureProvider = exports.Saml2BearerProvider = exports.OidcTokenExchangeProvider = exports.OidcPasswordProvider = exports.OidcDeviceFlowProvider = exports.OidcBrowserProvider = exports.
|
|
9
|
+
exports.UaaPasscodeProvider = exports.Saml2PureProvider = exports.Saml2BearerProvider = exports.OidcTokenExchangeProvider = exports.OidcPasswordProvider = exports.OidcDeviceFlowProvider = exports.OidcBrowserProvider = exports.ClientCredentialsProvider = exports.BaseTokenProvider = exports.AuthorizationCodeProvider = void 0;
|
|
10
10
|
var AuthorizationCodeProvider_1 = require("./AuthorizationCodeProvider");
|
|
11
11
|
Object.defineProperty(exports, "AuthorizationCodeProvider", { enumerable: true, get: function () { return AuthorizationCodeProvider_1.AuthorizationCodeProvider; } });
|
|
12
12
|
var BaseTokenProvider_1 = require("./BaseTokenProvider");
|
|
13
13
|
Object.defineProperty(exports, "BaseTokenProvider", { enumerable: true, get: function () { return BaseTokenProvider_1.BaseTokenProvider; } });
|
|
14
14
|
var ClientCredentialsProvider_1 = require("./ClientCredentialsProvider");
|
|
15
15
|
Object.defineProperty(exports, "ClientCredentialsProvider", { enumerable: true, get: function () { return ClientCredentialsProvider_1.ClientCredentialsProvider; } });
|
|
16
|
-
var DeviceFlowProvider_1 = require("./DeviceFlowProvider");
|
|
17
|
-
Object.defineProperty(exports, "DeviceFlowProvider", { enumerable: true, get: function () { return DeviceFlowProvider_1.DeviceFlowProvider; } });
|
|
18
16
|
var OidcBrowserProvider_1 = require("./OidcBrowserProvider");
|
|
19
17
|
Object.defineProperty(exports, "OidcBrowserProvider", { enumerable: true, get: function () { return OidcBrowserProvider_1.OidcBrowserProvider; } });
|
|
20
18
|
var OidcDeviceFlowProvider_1 = require("./OidcDeviceFlowProvider");
|
|
@@ -27,3 +25,5 @@ var Saml2BearerProvider_1 = require("./Saml2BearerProvider");
|
|
|
27
25
|
Object.defineProperty(exports, "Saml2BearerProvider", { enumerable: true, get: function () { return Saml2BearerProvider_1.Saml2BearerProvider; } });
|
|
28
26
|
var Saml2PureProvider_1 = require("./Saml2PureProvider");
|
|
29
27
|
Object.defineProperty(exports, "Saml2PureProvider", { enumerable: true, get: function () { return Saml2PureProvider_1.Saml2PureProvider; } });
|
|
28
|
+
var UaaPasscodeProvider_1 = require("./UaaPasscodeProvider");
|
|
29
|
+
Object.defineProperty(exports, "UaaPasscodeProvider", { enumerable: true, get: function () { return UaaPasscodeProvider_1.UaaPasscodeProvider; } });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SAML2 provider shared helpers.
|
|
3
3
|
*/
|
|
4
|
-
import type { IAuthorizationStrategy } from '@mcp-abap-adt/interfaces-auth';
|
|
4
|
+
import type { IAssertionReplayStore, IAssertionValidator, IAuthorizationStrategy } from '@mcp-abap-adt/interfaces-auth';
|
|
5
5
|
import type { ILogger } from '@mcp-abap-adt/interfaces-utils';
|
|
6
6
|
export interface Saml2CommonConfig {
|
|
7
7
|
idpSsoUrl: string;
|
|
@@ -17,6 +17,32 @@ export interface Saml2CommonConfig {
|
|
|
17
17
|
/** How the login is conducted. Omitted means a browser callback. */
|
|
18
18
|
authorization?: IAuthorizationStrategy<string>;
|
|
19
19
|
logger?: ILogger;
|
|
20
|
+
/** PEM or bare base64 DER. Required when no `assertionValidator` is supplied. */
|
|
21
|
+
idpCertificates?: string[];
|
|
22
|
+
/**
|
|
23
|
+
* The `Issuer` the assertion must name. Required unless the supplied
|
|
24
|
+
* `assertionValidator` is a custom one: a shipped validator supplied there
|
|
25
|
+
* still needs it, since it fails closed without an expected issuer.
|
|
26
|
+
*/
|
|
27
|
+
idpEntityId?: string;
|
|
28
|
+
/** Finite, non-negative, integer. Defaults to 0. */
|
|
29
|
+
clockSkewMs?: number;
|
|
30
|
+
/**
|
|
31
|
+
* The AuthnRequest ID this login answers, when this package did not mint one
|
|
32
|
+
* itself — a pre-built `authorizationUrl`, or a strategy that obtained the
|
|
33
|
+
* response some other way after a request the consumer sent.
|
|
34
|
+
*/
|
|
35
|
+
authnRequestId?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Declares that no AuthnRequest is sent: the assertion must carry no
|
|
38
|
+
* `InResponseTo`. Default `false`. Combining this with a minted or declared
|
|
39
|
+
* request ID is a configuration error: the two describe different logins.
|
|
40
|
+
*/
|
|
41
|
+
idpInitiated?: boolean;
|
|
42
|
+
/** Which validator to use. Omitted means the provider's own default. */
|
|
43
|
+
assertionValidator?: IAssertionValidator;
|
|
44
|
+
/** A consumer's own replay store, for a deployment running more than one process. */
|
|
45
|
+
assertionReplayStore?: IAssertionReplayStore;
|
|
20
46
|
}
|
|
21
47
|
export interface Saml2BearerExchangeConfig {
|
|
22
48
|
tokenUrl?: string;
|
|
@@ -26,6 +52,27 @@ export interface Saml2BearerExchangeConfig {
|
|
|
26
52
|
}
|
|
27
53
|
/** Throw at construction rather than half-verify at runtime. */
|
|
28
54
|
export declare function validateSamlConfig(config: Saml2CommonConfig): void;
|
|
55
|
+
/**
|
|
56
|
+
* The consumer's validator when supplied, otherwise the provider's default —
|
|
57
|
+
* `createSignedAssertionValidator` for `"bearer"`, since the token endpoint
|
|
58
|
+
* receives the Assertion alone (#40) and its own signature is what that
|
|
59
|
+
* endpoint verifies; `createSignedResponseValidator` for `"pure"`, since the
|
|
60
|
+
* whole response is handed on and `Status`/`Destination` must be inside a
|
|
61
|
+
* signature. See the spec's "A bare Assertion, and which validator each
|
|
62
|
+
* provider defaults to".
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveAssertionValidator(config: Saml2CommonConfig, provider: 'bearer' | 'pure'): IAssertionValidator;
|
|
29
65
|
export declare function resolveTokenUrl(config: Saml2BearerExchangeConfig): string;
|
|
30
|
-
|
|
66
|
+
/** What `getSamlAssertion` hands back: the wire payload, plus what it knows about the login. */
|
|
67
|
+
export interface SamlAssertionResult {
|
|
68
|
+
readonly payload: string;
|
|
69
|
+
/**
|
|
70
|
+
* `undefined` exactly when the login is declared `idpInitiated` and no ID
|
|
71
|
+
* was minted or declared for it.
|
|
72
|
+
*/
|
|
73
|
+
readonly requestId?: string;
|
|
74
|
+
/** Where the strategy actually listened — `outcome.redirectUri`, never `config.acsUrl`. */
|
|
75
|
+
readonly acsUrl: string;
|
|
76
|
+
}
|
|
77
|
+
export declare function getSamlAssertion(config: Saml2CommonConfig): Promise<SamlAssertionResult>;
|
|
31
78
|
//# sourceMappingURL=saml2Utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saml2Utils.d.ts","sourceRoot":"","sources":["../../src/providers/saml2Utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"saml2Utils.d.ts","sourceRoot":"","sources":["../../src/providers/saml2Utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAU9D,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,aAAa,CAAC,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,qFAAqF;IACrF,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;CAC9C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAOlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAC1B,mBAAmB,CAsCrB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,CAQzE;AAED,gGAAgG;AAChG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAuE9B"}
|