mirror of
https://github.com/kmc7468/arkvault.git
synced 2025-12-12 21:08:46 +00:00
Token Refresh/Upgrade와 관련된 DB 제약 위반 수정
This commit is contained in:
@@ -36,7 +36,7 @@ export const generateRSASigKeyPair = async () => {
|
||||
return keyPair;
|
||||
};
|
||||
|
||||
export const makeRSAKeyNonextractable = async (key: CryptoKey, type: RSAKeyType) => {
|
||||
export const makeRSAEncKeyNonextractable = async (key: CryptoKey, type: RSAKeyType) => {
|
||||
const { format, key: exportedKey } = await exportRSAKey(key, type);
|
||||
return await window.crypto.subtle.importKey(
|
||||
format,
|
||||
@@ -50,6 +50,20 @@ export const makeRSAKeyNonextractable = async (key: CryptoKey, type: RSAKeyType)
|
||||
);
|
||||
};
|
||||
|
||||
export const makeRSASigKeyNonextractable = async (key: CryptoKey, type: RSAKeyType) => {
|
||||
const { format, key: exportedKey } = await exportRSAKey(key, type);
|
||||
return await window.crypto.subtle.importKey(
|
||||
format,
|
||||
exportedKey,
|
||||
{
|
||||
name: "RSA-PSS",
|
||||
hash: "SHA-256",
|
||||
} satisfies RsaHashedImportParams,
|
||||
false,
|
||||
[type === "public" ? "verify" : "sign"],
|
||||
);
|
||||
};
|
||||
|
||||
const exportRSAKey = async (key: CryptoKey, type: RSAKeyType) => {
|
||||
const format = type === "public" ? ("spki" as const) : ("pkcs8" as const);
|
||||
return {
|
||||
|
||||
@@ -38,15 +38,20 @@ export const getRefreshToken = async (tokenId: string) => {
|
||||
};
|
||||
|
||||
export const rotateRefreshToken = async (oldTokenId: string, newTokenId: string) => {
|
||||
const res = await db
|
||||
.update(refreshToken)
|
||||
.set({
|
||||
id: newTokenId,
|
||||
expiresAt: expiresAt(),
|
||||
})
|
||||
.where(eq(refreshToken.id, oldTokenId))
|
||||
.execute();
|
||||
return res.changes > 0;
|
||||
return await db.transaction(async (tx) => {
|
||||
await tx
|
||||
.delete(tokenUpgradeChallenge)
|
||||
.where(eq(tokenUpgradeChallenge.refreshTokenId, oldTokenId));
|
||||
const res = await db
|
||||
.update(refreshToken)
|
||||
.set({
|
||||
id: newTokenId,
|
||||
expiresAt: expiresAt(),
|
||||
})
|
||||
.where(eq(refreshToken.id, oldTokenId))
|
||||
.execute();
|
||||
return res.changes > 0;
|
||||
});
|
||||
};
|
||||
|
||||
export const upgradeRefreshToken = async (
|
||||
@@ -54,16 +59,21 @@ export const upgradeRefreshToken = async (
|
||||
newTokenId: string,
|
||||
clientId: number,
|
||||
) => {
|
||||
const res = await db
|
||||
.update(refreshToken)
|
||||
.set({
|
||||
id: newTokenId,
|
||||
clientId,
|
||||
expiresAt: expiresAt(),
|
||||
})
|
||||
.where(eq(refreshToken.id, oldTokenId))
|
||||
.execute();
|
||||
return res.changes > 0;
|
||||
return await db.transaction(async (tx) => {
|
||||
await tx
|
||||
.delete(tokenUpgradeChallenge)
|
||||
.where(eq(tokenUpgradeChallenge.refreshTokenId, oldTokenId));
|
||||
const res = await tx
|
||||
.update(refreshToken)
|
||||
.set({
|
||||
id: newTokenId,
|
||||
clientId,
|
||||
expiresAt: expiresAt(),
|
||||
})
|
||||
.where(eq(refreshToken.id, oldTokenId))
|
||||
.execute();
|
||||
return res.changes > 0;
|
||||
});
|
||||
};
|
||||
|
||||
export const revokeRefreshToken = async (tokenId: string) => {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import {
|
||||
generateRSAEncKeyPair,
|
||||
generateRSASigKeyPair,
|
||||
makeRSAKeyNonextractable,
|
||||
makeRSAEncKeyNonextractable,
|
||||
makeRSASigKeyNonextractable,
|
||||
exportRSAKeyToBase64,
|
||||
generateAESKey,
|
||||
makeAESKeyNonextractable,
|
||||
@@ -16,11 +17,11 @@ export const generateKeyPairs = async () => {
|
||||
keyPairsStore.set({
|
||||
encKeyPair: {
|
||||
publicKey: encKeyPair.publicKey,
|
||||
privateKey: await makeRSAKeyNonextractable(encKeyPair.privateKey, "private"),
|
||||
privateKey: await makeRSAEncKeyNonextractable(encKeyPair.privateKey, "private"),
|
||||
},
|
||||
sigKeyPair: {
|
||||
publicKey: sigKeyPair.publicKey,
|
||||
privateKey: await makeRSAKeyNonextractable(sigKeyPair.privateKey, "private"),
|
||||
privateKey: await makeRSASigKeyNonextractable(sigKeyPair.privateKey, "private"),
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user