import ExpressOAuthServer = require("express-oauth-server"); import * as OAuth2Server from "oauth2-server"; import express = require("express"); const oauth2Model: OAuth2Server.AuthorizationCodeModel = { getClient: async (clientId: string, clientSecret: string): Promise => { return undefined; }, saveToken: async (token: OAuth2Server.Token, client: OAuth2Server.Client, user: OAuth2Server.User): Promise => { return token; }, getAccessToken: async (accessToken: string): Promise => { return { accessToken, client: {id: "testClient", grants: ["access_token"]}, user: {id: "testUser"} }; }, verifyScope: async (token: OAuth2Server.Token, scope: string): Promise => { return true; }, getAuthorizationCode: async (authorizationCode: string): Promise => { return { authorizationCode, expiresAt: new Date(), redirectUri: "www.test.com", client: {id: "testClient", grants: ["access_token"]}, user: {id: "testUser"} }; }, saveAuthorizationCode: async (code: OAuth2Server.AuthorizationCode, client: OAuth2Server.Client, user: OAuth2Server.User): Promise => { return code; }, revokeAuthorizationCode: async (code: OAuth2Server.AuthorizationCode): Promise => { return true; } }; const serverOptions: OAuth2Server.ServerOptions = { model: oauth2Model, }; const expressOAuthServer: ExpressOAuthServer = new ExpressOAuthServer(serverOptions); let oAuthServer: OAuth2Server; let resultingTokenMiddleware: ( request: express.Request, response: express.Response, next: express.NextFunction, ) => Promise; let resultingAuthorizationCodeMiddleware: ( request: express.Request, response: express.Response, next: express.NextFunction, ) => Promise; oAuthServer = expressOAuthServer.server; resultingTokenMiddleware = expressOAuthServer.authenticate(); resultingTokenMiddleware = expressOAuthServer.token(); resultingAuthorizationCodeMiddleware = expressOAuthServer.authorize(); // Real-life example const expressApp = express(); expressApp.all( "/path", expressOAuthServer.authenticate(), (req: express.Request, res: express.Response, next: express.NextFunction) => { res.json({message: "Secure data"}); }, ); expressApp.get( "/profile", expressOAuthServer.authenticate({scope: "profile"}), (req: express.Request & {user?: OAuth2Server.Token}, res: express.Response, next: express.NextFunction) => { res.json({ profile: req.user }); }, ); expressApp.listen(1234);