1.5.0 • Published 3 years ago

@divine-dkh/oauth2 v1.5.0

Weekly downloads
-
License
ISC
Repository
github
Last release
3 years ago

@divine-dkh/oauth2

OAuth2Client and OAuth2Server

Example

OAuth2Client

Example 1: Verify Google OAuth2 token

'use strict'

const { OAuth2Client } = require('@divine-dkh/oauth2')

const main = async () => {
    // google-issued oauth2 token
    const token = `eyJhbGciOiJSUzI1NiIsImtpZCI6IjViNWRkOWJlNDBiNWUxY2YxMjFlMzU3M2M4ZTQ5ZjEyNTI3MTgzZDMiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiYXpwIjoiMTQxMzEzMDg1OTEtbzFjajZkZ2EzMTlvZTcwb2owbjJyMjVoNjhtMjltZ2kuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiIxNDEzMTMwODU5MS1vMWNqNmRnYTMxOW9lNzBvajBuMnIyNWg2OG0yOW1naS5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsInN1YiI6IjExNTEzMzI0MTQ1MDgxNjUwNjg1NyIsImVtYWlsIjoiZGFuZ2t5b2tob2FuZ0BnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibm9uY2UiOiIwLjM3NzYwMTIyOTQ0MDM0NzkiLCJpYXQiOjE1NzU1MzY3NDUsImV4cCI6MTU3NTU0MDM0NSwianRpIjoiMTM1MjhiNmViNzUxZjRiYWEyM2U4MTlmN2FlNzcwYjI2ZDQ0MDRlNCJ9.Zp47rBhmYpKj-yqLPyAVGguoPktDXuFOOp4pUbpBZmqlGv-o4zSMKB_Qr9K8MQ6C53G850zdHfUKXZ1_KmSQJkktMw3GHltBZLKFW6lgEtNb3Vjeg71rh257DGfa518BwMtLc-mjxbcBPN2AZuNdXCbHDmGlfUhTVc4qD-tlHION1qor8M3TBoOb2WI2_iRVmeb70f51_cYJ6eqDPN9YVmILb185O_VQW7So76VtpcqmIqXHVwANdMN3VNImxuejsPaLqvKz46kFom8aCV3_tF4Lgnzx8kjVNVXnOBfUCaMId0JmRlG7G8vtwOMPYKp3OZD9FuG8F8rHQA5et-FJMQ`

    const oauth2Client = new OAuth2Client({
        keysUrl: `https://www.googleapis.com/oauth2/v1/certs`,
    })

    // verify google oauth2 token
    const payload = await oauth2Client.verify(token)

    console.log(payload)
    // => {
    //      iss: 'accounts.google.com',
    //      azp: '14131308591-o1cj6dga319oe70oj0n2r25h68m29mgi.apps.googleusercontent.com',
    //      aud: '14131308591-o1cj6dga319oe70oj0n2r25h68m29mgi.apps.googleusercontent.com',
    //      sub: '115133241450816506857',
    //      email: 'dangkyokhoang@gmail.com',
    //      email_verified: true,
    //      nonce: '0.3776012294403479',
    //      iat: 1575536745,
    //      exp: 1575540345,
    //      jti: '13528b6eb751f4baa23e819f7ae770b26d4404e4'
    //    }
}

main()

Example 2: Verify JWT

'use strict'

const { randomBytes } = require('crypto')
const jwt = require('jsonwebtoken')
const { OAuth2Client } = require('@divine-dkh/oauth2')

const main = async () => {
    const buffer = randomBytes(32)
    const data = { user: 'dangkyokhoang' }
    const token = jwt.sign(data, buffer, { keyid: 'buffer' })

    const oauth2Client = new OAuth2Client({
        keys: { buffer },
    })

    // verify token
    const payload = await oauth2Client.verify(token)

    console.log(payload)
    // => { user: 'dangkyokhoang', iat: 1575532864 }
}

main()

OAuth2Server

Example 1: Generate and verify access token

'use strict'

const { randomBytes } = require('crypto')
const { OAuth2Server } = require('@divine-dkh/oauth2')

const main = async () => {
    const buffer = randomBytes(32)
    const data = { user: 'dangkyokhoang' }

    const oauth2Server = new OAuth2Server({ keys: { buffer } })

    // generate and verify access token

    const token = await oauth2Server.generateAccessToken(data)
    const payload = await oauth2Server.verifyAccessToken(token)

    console.log(payload)
    // => { user: 'dangkyokhoang', iat: 1575535244, exp: 1575621644 }
}

main()

Example 2: Generate access token with a refresh token

'use strict'

const { randomBytes } = require('crypto')
const { OAuth2Server } = require('@divine-dkh/oauth2')

const main = async () => {
    const buffer = randomBytes(32)
    const data = { user: 'dangkyokhoang' }

    const oauth2Server = new OAuth2Server({ keys: { buffer } })

    // generate refresh token
    const refreshToken = await oauth2Server.generateRefeshToken(data)

    // generate access token with the refresh token

    // first verify the refresh token
    const { user } = await oauth2Server.verifyRefreshToken(refreshToken)

    // generate access token
    const token = await oauth2Server.generateAccessToken(user)
    const payload = await oauth2Server.verifyAccessToken(token)

    console.log(payload)
    // => { user: 'dangkyokhoang', iat: 1575535244, exp: 1575621644 }
}

main()