backend-app-api: move limited token creation to UserTokenHandler
Co-authored-by: Camila Belo <camilaibs@gmail.com> Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
committed by
Camila Belo
parent
7396a75d62
commit
c2aa1ffe1c
@@ -19,6 +19,7 @@ import { DiscoveryService } from '@backstage/backend-plugin-api';
|
||||
import { AuthenticationError } from '@backstage/errors';
|
||||
import { TokenTypes } from '@backstage/plugin-auth-node';
|
||||
import {
|
||||
base64url,
|
||||
createRemoteJWKSet,
|
||||
decodeJwt,
|
||||
decodeProtectedHeader,
|
||||
@@ -102,6 +103,37 @@ export class UserTokenHandler {
|
||||
return { userEntityRef };
|
||||
}
|
||||
|
||||
createLimitedUserToken(backstageToken: string) {
|
||||
const [headerRaw, payloadRaw] = backstageToken.split('.');
|
||||
const header = JSON.parse(
|
||||
new TextDecoder().decode(base64url.decode(headerRaw)),
|
||||
);
|
||||
const payload = JSON.parse(
|
||||
new TextDecoder().decode(base64url.decode(payloadRaw)),
|
||||
);
|
||||
|
||||
const limitedUserToken = [
|
||||
base64url.encode(
|
||||
JSON.stringify({
|
||||
typ: 'vnd.backstage.limited-user',
|
||||
alg: header.alg,
|
||||
kid: header.kid,
|
||||
}),
|
||||
),
|
||||
base64url.encode(
|
||||
JSON.stringify({
|
||||
sub: payload.sub,
|
||||
ent: payload.ent,
|
||||
iat: payload.iat,
|
||||
exp: payload.exp,
|
||||
}),
|
||||
),
|
||||
payload.uip,
|
||||
].join('.');
|
||||
|
||||
return { token: limitedUserToken, expiresAt: new Date(payload.exp * 1000) };
|
||||
}
|
||||
|
||||
/**
|
||||
* If the last keystore refresh is stale, update the keystore URL to the latest
|
||||
*/
|
||||
|
||||
@@ -27,7 +27,7 @@ import {
|
||||
} from '@backstage/backend-plugin-api';
|
||||
import { AuthenticationError } from '@backstage/errors';
|
||||
import { TokenTypes } from '@backstage/plugin-auth-node';
|
||||
import { base64url, decodeJwt, decodeProtectedHeader } from 'jose';
|
||||
import { decodeJwt, decodeProtectedHeader } from 'jose';
|
||||
import { UserTokenHandler } from './UserTokenHandler';
|
||||
|
||||
/** @internal */
|
||||
@@ -231,34 +231,7 @@ class DefaultAuthService implements AuthService {
|
||||
);
|
||||
}
|
||||
|
||||
const [headerRaw, payloadRaw] = backstageToken.split('.');
|
||||
const header = JSON.parse(
|
||||
new TextDecoder().decode(base64url.decode(headerRaw)),
|
||||
);
|
||||
const payload = JSON.parse(
|
||||
new TextDecoder().decode(base64url.decode(payloadRaw)),
|
||||
);
|
||||
|
||||
const limitedUserToken = [
|
||||
base64url.encode(
|
||||
JSON.stringify({
|
||||
typ: 'vnd.backstage.limited-user',
|
||||
alg: header.alg,
|
||||
kid: header.kid,
|
||||
}),
|
||||
),
|
||||
base64url.encode(
|
||||
JSON.stringify({
|
||||
sub: payload.sub,
|
||||
ent: payload.ent,
|
||||
iat: payload.iat,
|
||||
exp: payload.exp,
|
||||
}),
|
||||
),
|
||||
payload.uip,
|
||||
].join('.');
|
||||
|
||||
return { token: limitedUserToken, expiresAt: new Date(payload.exp * 1000) };
|
||||
return this.userTokenHandler.createLimitedUserToken(backstageToken);
|
||||
}
|
||||
|
||||
#getJwtExpiration(token: string) {
|
||||
|
||||
Reference in New Issue
Block a user