1.5.0 • Published 3 years ago
@divine-dkh/oauth2 v1.5.0
@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()
1.5.0
3 years ago