89 lines
3.3 KiB
TypeScript
89 lines
3.3 KiB
TypeScript
![]() |
import { OIDCProvider } from '../src';
|
|||
|
import type { OIDCProviderConfig } from '../src/types';
|
|||
|
|
|||
|
// 示例:使用RS256算法自动生成密钥对
|
|||
|
const configWithRS256: OIDCProviderConfig = {
|
|||
|
issuer: 'https://your-auth-server.com',
|
|||
|
signingKey: 'temporary-key', // 这个字符串会被自动生成的RSA密钥对替代
|
|||
|
signingAlgorithm: 'RS256', // 指定使用RSA算法
|
|||
|
storage: {} as any, // 这里应该是真实的存储适配器
|
|||
|
findUser: async (userId: string) => null,
|
|||
|
findClient: async (clientId: string) => null,
|
|||
|
authConfig: {
|
|||
|
passwordValidator: async (username: string, password: string) => null,
|
|||
|
},
|
|||
|
};
|
|||
|
|
|||
|
// 示例:使用ES256算法自动生成密钥对
|
|||
|
const configWithES256: OIDCProviderConfig = {
|
|||
|
issuer: 'https://your-auth-server.com',
|
|||
|
signingKey: 'temporary-key', // 这个字符串会被自动生成的ECDSA密钥对替代
|
|||
|
signingAlgorithm: 'ES256', // 指定使用ECDSA算法
|
|||
|
storage: {} as any,
|
|||
|
findUser: async (userId: string) => null,
|
|||
|
findClient: async (clientId: string) => null,
|
|||
|
authConfig: {
|
|||
|
passwordValidator: async (username: string, password: string) => null,
|
|||
|
},
|
|||
|
};
|
|||
|
|
|||
|
// 示例:使用HS256算法(不会自动生成密钥对)
|
|||
|
const configWithHS256: OIDCProviderConfig = {
|
|||
|
issuer: 'https://your-auth-server.com',
|
|||
|
signingKey: 'your-secret-key', // 对于HMAC,直接使用字符串密钥
|
|||
|
signingAlgorithm: 'HS256',
|
|||
|
storage: {} as any,
|
|||
|
findUser: async (userId: string) => null,
|
|||
|
findClient: async (clientId: string) => null,
|
|||
|
authConfig: {
|
|||
|
passwordValidator: async (username: string, password: string) => null,
|
|||
|
},
|
|||
|
};
|
|||
|
|
|||
|
// 使用示例
|
|||
|
async function demonstrateAutoKeyGeneration() {
|
|||
|
console.log('=== 自动密钥生成示例 ===\n');
|
|||
|
|
|||
|
// RS256 示例
|
|||
|
console.log('1. 创建使用RS256算法的Provider:');
|
|||
|
const providerRS256 = new OIDCProvider(configWithRS256);
|
|||
|
|
|||
|
// 第一次调用会触发RSA密钥对生成
|
|||
|
console.log('获取JWKS (会自动生成RSA密钥对):');
|
|||
|
const jwksRS256 = await providerRS256.getJWKS();
|
|||
|
console.log('RSA JWKS keys数量:', jwksRS256.keys.length);
|
|||
|
console.log('RSA 密钥类型:', jwksRS256.keys[0]?.kty);
|
|||
|
console.log('RSA 算法:', jwksRS256.keys[0]?.alg);
|
|||
|
console.log('');
|
|||
|
|
|||
|
// ES256 示例
|
|||
|
console.log('2. 创建使用ES256算法的Provider:');
|
|||
|
const providerES256 = new OIDCProvider(configWithES256);
|
|||
|
|
|||
|
// 第一次调用会触发ECDSA密钥对生成
|
|||
|
console.log('获取JWKS (会自动生成ECDSA密钥对):');
|
|||
|
const jwksES256 = await providerES256.getJWKS();
|
|||
|
console.log('ECDSA JWKS keys数量:', jwksES256.keys.length);
|
|||
|
console.log('ECDSA 密钥类型:', jwksES256.keys[0]?.kty);
|
|||
|
console.log('ECDSA 算法:', jwksES256.keys[0]?.alg);
|
|||
|
console.log('');
|
|||
|
|
|||
|
// HS256 示例
|
|||
|
console.log('3. 创建使用HS256算法的Provider:');
|
|||
|
const providerHS256 = new OIDCProvider(configWithHS256);
|
|||
|
|
|||
|
// HS256不会生成JWKS
|
|||
|
console.log('获取JWKS (HS256不暴露密钥):');
|
|||
|
const jwksHS256 = await providerHS256.getJWKS();
|
|||
|
console.log('HS256 JWKS keys数量:', jwksHS256.keys.length);
|
|||
|
console.log('');
|
|||
|
|
|||
|
console.log('=== 示例完成 ===');
|
|||
|
}
|
|||
|
|
|||
|
// 如果直接运行此文件
|
|||
|
if (require.main === module) {
|
|||
|
demonstrateAutoKeyGeneration().catch(console.error);
|
|||
|
}
|
|||
|
|
|||
|
export { demonstrateAutoKeyGeneration };
|