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