메인 콘텐츠로 건너뛰기

JavaScript 예제

const fs = require('fs')
const path = require('path')
const jwt = require('jsonwebtoken')
const request = require('request')

// 설정
const basePath = 'https://identityhomolog.acesso.io'

// 진입점
let options = {
serviceAccount: 'svcapp1',
tenant: "9ea3c3bd-4447-4c3b-ae2e-504b795d3733"
}

requestAnAccessToken(createServiceAccountToken(options), (err, accessToken) => {
let payload = jwt.decode(accessToken.access_token)
console.log('Response:')
console.log(' Access Token: ', accessToken.access_token)
console.log(' ID: ', payload.jti)
console.log(' Issuer: ', payload.iss)
console.log(' Subject: ', payload.sub)
console.log(' expires_in: ', accessToken.expires_in)
console.log(' Expiration Date: ', new Date(payload.exp * 1000))
console.log(' Creation Date: ', new Date(payload.iat * 1000))
})

// 함수
function createServiceAccountToken({tenant, serviceAccount, account = ''}) {
// 서비스 계정 개인 키를 읽습니다
let privateKey = fs.readFileSync(path.resolve(`${serviceAccount}.key.pem`))

// 요청 준비
let payload = {
iss: `${serviceAccount}@${tenant}.iam.acesso.io`,
aud: basePath,
scope: '*',
exp: Math.floor(Date.now() / 1000) + 3600,
iat: Math.floor(Date.now() / 1000)
}
// 서비스 계정이 다른 사용자를 위한 액세스 토큰을 요청하고 있습니까?
if (account) {
payload.sub = account
}

// JWS 생성
return jwt.sign(payload, privateKey, { algorithm: 'RS256' })
}

function requestAnAccessToken(serviceToken, callback) {
// 요청 준비
let options = {
method: 'POST',
url: `${basePath}/oauth2/token`,
headers: {'content-type': 'application/x-www-form-urlencoded'},
form: {
grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer' ,
assertion: serviceToken
}
}
console.log('Requesting Access Token with self created token:' )
console.log('', serviceToken)

// 신원 및 인증 서버에 액세스 토큰 요청
request(options, (error, response, body) => {
if (error) {
callback(new Error(error))
}

body = JSON.parse(body)

if (body.error) {
callback(new Error(`${body.error}: ${body.error_description}`))
}

callback(null, body)
})
}