custom AuthConnector for OAuth2

Signed-off-by: Gasan Guseinov <gasan.guseinov@ing.com>
This commit is contained in:
Gasan Guseinov
2024-12-05 19:15:43 +01:00
parent 647788476b
commit 1e0230e304
3 changed files with 43 additions and 13 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-app-api': patch
---
custom AuthConnector for OAuth2
@@ -15,6 +15,7 @@
*/
import {
AuthConnector,
DefaultAuthConnector,
PopupOptions,
} from '../../../../lib/AuthConnector';
@@ -43,6 +44,9 @@ import { OAuthApiCreateOptions } from '../types';
export type OAuth2CreateOptions = OAuthApiCreateOptions & {
scopeTransform?: (scopes: string[]) => string[];
popupOptions?: PopupOptions;
authConnectorFactory?: (
opts: OAuth2CreateOptions,
) => AuthConnector<OAuth2Session>;
};
export type OAuth2Response = {
@@ -79,23 +83,22 @@ export default class OAuth2
BackstageIdentityApi,
SessionApi
{
static create(options: OAuth2CreateOptions) {
private static createDefaultAuthConnector(options: OAuth2CreateOptions) {
const {
configApi,
discoveryApi,
environment = 'development',
provider = DEFAULT_PROVIDER,
oauthRequestApi,
defaultScopes = [],
scopeTransform = x => x,
popupOptions,
} = options;
const connector = new DefaultAuthConnector({
configApi,
discoveryApi,
environment,
provider,
oauthRequestApi,
scopeTransform,
popupOptions,
} = options;
return new DefaultAuthConnector({
configApi,
discoveryApi,
environment: environment!,
provider: provider!,
oauthRequestApi: oauthRequestApi,
sessionTransform({
backstageIdentity,
@@ -107,7 +110,7 @@ export default class OAuth2
idToken: res.providerInfo.idToken,
accessToken: res.providerInfo.accessToken,
scopes: OAuth2.normalizeScopes(
scopeTransform,
scopeTransform!,
res.providerInfo.scope,
),
expiresAt: res.providerInfo.expiresInSeconds
@@ -128,6 +131,24 @@ export default class OAuth2
},
popupOptions,
});
}
static create(options: OAuth2CreateOptions) {
const {
environment = 'development',
provider = DEFAULT_PROVIDER,
defaultScopes = [],
scopeTransform = x => x,
authConnectorFactory = (opts: OAuth2CreateOptions) =>
OAuth2.createDefaultAuthConnector(opts),
} = options;
const connector = authConnectorFactory({
...options,
scopeTransform,
environment,
provider,
});
const sessionManager = new RefreshingAuthSessionManager({
connector,
+4
View File
@@ -23,3 +23,7 @@
export * from './apis';
export * from './app';
export * from './routing';
export type { AuthConnector } from './lib';
export type { CreateSessionOptions } from './lib';
export { showLoginPopup } from './lib';
export type { LoginPopupOptions } from './lib';