oauth2-server-grant-type-apple
Version:
Apple grant type for oauth2-server
1 lines • 9.41 kB
Source Map (JSON)
{"version":3,"file":"oauth2-server-grant-type-apple.modern.mjs","sources":["../src/verifyToken.ts","../src/index.ts"],"sourcesContent":["import jwt, { VerifyOptions, GetPublicKeyOrSecret } from 'jsonwebtoken';\nimport jwksRsaClient from 'jwks-rsa';\n\nconst jwksClient = jwksRsaClient({\n cache: true,\n jwksUri: 'https://appleid.apple.com/auth/keys',\n});\n\nconst getKey: GetPublicKeyOrSecret = (header, callback) => {\n jwksClient\n .getSigningKey(header.kid)\n .then((key) => {\n const signingKey = key.getPublicKey();\n callback(null, signingKey);\n })\n .catch((err) => {\n callback(err);\n });\n};\n\nconst ISSUER = 'https://appleid.apple.com';\n\n// jwt only supports callback now\n// https://github.com/auth0/node-jsonwebtoken/issues/111\nconst verifyToken = ({\n token,\n audience,\n ...rest\n}: {\n token: string;\n audience?: VerifyOptions['audience'];\n}) => {\n return new Promise((resolve, reject) => {\n jwt.verify(\n token,\n getKey,\n {\n algorithms: ['RS256'],\n issuer: ISSUER,\n audience,\n ...rest,\n },\n (err, data) => {\n if (err) {\n return reject(err);\n }\n\n resolve(data);\n },\n );\n });\n};\n\nexport default verifyToken;\n","import {\n User,\n Client,\n Token,\n AbstractGrantType,\n InvalidArgumentError,\n InvalidRequestError,\n InvalidTokenError,\n TokenOptions,\n Request,\n} from 'oauth2-server';\nimport verifyToken from './verifyToken';\nimport { Model } from './types';\n\nexport interface Options extends TokenOptions {\n model: Model;\n}\n\nclass AppleGrantType extends AbstractGrantType {\n model: Model;\n appIds: string[];\n\n constructor(options: Options) {\n super(options);\n this.model = options.model;\n\n if (!options.model) {\n throw new InvalidArgumentError('Missing parameter: `model`');\n }\n\n if (!options.model.getUserWithApple) {\n throw new InvalidArgumentError(\n 'Invalid argument: model does not implement `getUserWithApple()`',\n );\n }\n\n const appId = this.model.appleGrantType?.appId;\n\n this.appIds = appId ? (Array.isArray(appId) ? appId : Array(appId)) : [];\n\n if (!this.appIds.length) {\n throw new InvalidArgumentError(\n 'Invalid argument: Apple valid appId must be provided in grant type options',\n );\n }\n\n if (!options.model.saveToken) {\n throw new InvalidArgumentError(\n 'Invalid argument: model does not implement `saveToken()`',\n );\n }\n\n this.handle = this.handle.bind(this);\n this.getUser = this.getUser.bind(this);\n this.saveToken = this.saveToken.bind(this);\n }\n\n async handle(request: Request, client: Client) {\n if (!request) {\n throw new InvalidArgumentError('Missing parameter: `request`');\n }\n\n if (!client) {\n throw new InvalidArgumentError('Missing parameter: `client`');\n }\n\n const scope = this.getScope(request);\n const user = await this.getUser(request);\n\n return await this.saveToken(user, client, scope);\n }\n\n async getUser(request: Request) {\n const token = request.body.apple_token;\n const name = request.body.name;\n\n if (!token) {\n throw new InvalidRequestError('Missing parameter: `apple_token`');\n }\n\n let data: object;\n\n try {\n data = (await verifyToken({\n token,\n audience: this.appIds,\n })) as object;\n } catch (err) {\n console.error(err);\n throw new InvalidTokenError('Apple token is invalid or expired');\n }\n\n return await this.model.getUserWithApple({ name, ...data });\n }\n\n async saveToken(user: User, client: Client, scope: string | string[]) {\n const scopeData = await this.validateScope(user, client, scope);\n const accessToken = await this.generateAccessToken(client, user, scope);\n const refreshToken = await this.generateRefreshToken(client, user, scope);\n const accessTokenExpiresAt = this.getAccessTokenExpiresAt();\n const refreshTokenExpiresAt = await this.getRefreshTokenExpiresAt();\n\n const token: Token = {\n accessToken,\n accessTokenExpiresAt,\n refreshToken,\n refreshTokenExpiresAt,\n scope: scopeData || [],\n user,\n client,\n };\n\n return await this.model.saveToken(token, client, user);\n }\n}\n\nexport default AppleGrantType;\n"],"names":["jwksClient","jwksRsaClient","cache","jwksUri","getKey","header","callback","getSigningKey","kid","then","key","signingKey","getPublicKey","catch","err","ISSUER","verifyToken","token","audience","rest","Promise","resolve","reject","jwt","verify","algorithms","issuer","data","AppleGrantType","AbstractGrantType","constructor","options","model","appIds","InvalidArgumentError","getUserWithApple","appId","appleGrantType","Array","isArray","length","saveToken","handle","bind","getUser","request","client","scope","getScope","user","body","apple_token","name","InvalidRequestError","console","error","InvalidTokenError","scopeData","validateScope","accessToken","generateAccessToken","refreshToken","generateRefreshToken","accessTokenExpiresAt","getAccessTokenExpiresAt","refreshTokenExpiresAt","getRefreshTokenExpiresAt"],"mappings":"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"}