backend-common: make token accessbile for legacy shim for identity service

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2024-08-21 01:32:47 +02:00
parent fa8d1a7c6a
commit d1608fe7ca
@@ -18,7 +18,6 @@ import {
AuthService,
coreServices,
createBackendPlugin,
HttpAuthService,
LoggerService,
RootConfigService,
ServiceRef,
@@ -97,32 +96,32 @@ export interface LegacyIdentityService {
>;
}
// This doesn't use DefaultIdentityClient because we will be removing it and break support for ownershipEntityRefs
function createIdentityServiceShim(
httpAuth: HttpAuthService,
auth: AuthService,
userInfo: UserInfoService,
): LegacyIdentityService {
return {
async getIdentity(options) {
const credentials = await httpAuth
.credentials(options.request, {
allow: ['user'],
})
.catch(() => undefined);
const authHeader = options.request.headers.authorization;
if (typeof authHeader !== 'string') {
return undefined;
}
if (!credentials) {
const token = authHeader.match(/^Bearer[ ]+(\S+)$/i)?.[1];
if (!token) {
return undefined;
}
const credentials = await auth.authenticate(token);
if (!auth.isPrincipal(credentials, 'user')) {
return undefined;
}
const info = await userInfo.getUserInfo(credentials);
return {
get token(): string {
throw new Error(
'The identity service shim provided by legacyPlugin does not support accessing the user token. ' +
'The calling plugin needs to be migrated to use the new auth services. ' +
'See https://backstage.io/docs/tutorials/auth-service-migration',
);
},
token,
identity: {
type: 'user',
userEntityRef: info.userEntityRef,
@@ -169,7 +168,6 @@ export function makeLegacyPlugin<
...envMapping,
$$router: coreServices.httpRouter,
$$auth: coreServices.auth,
$$httpAuth: coreServices.httpAuth,
$$userInfo: coreServices.userInfo,
$$config: coreServices.rootConfig,
$$logger: coreServices.logger,
@@ -177,7 +175,6 @@ export function makeLegacyPlugin<
async init({
$$auth,
$$config,
$$httpAuth,
$$logger,
$$router,
$$userInfo,
@@ -196,7 +193,6 @@ export function makeLegacyPlugin<
const auth = $$auth as typeof coreServices.auth.T;
const config = $$config as typeof coreServices.rootConfig.T;
const httpAuth = $$httpAuth as typeof coreServices.httpAuth.T;
const logger = $$logger as typeof coreServices.logger.T;
const router = $$router as typeof coreServices.httpRouter.T;
const userInfo = $$userInfo as typeof coreServices.userInfo.T;
@@ -207,7 +203,7 @@ export function makeLegacyPlugin<
config,
logger,
);
pluginEnv.identity = createIdentityServiceShim(httpAuth, userInfo);
pluginEnv.identity = createIdentityServiceShim(auth, userInfo);
const pluginRouter = await createRouter(
pluginEnv as TransformedEnv<TEnv, TEnvTransforms> & {