SSO node.js 구현 동기화

필요한 분들을 위해 NodeJS 예시를 공유합니다:

'use strict';

const axios = require('axios');
const crypto = require('crypto');
const qs = require('querystring');
const config = require('./config');

function getHash(data, secret) {
  return crypto.createHmac('sha256', secret)
    .update(data)
    .digest('hex');
}

function syncSso() {
  const endpoint = `${config.discourse.url}/admin/users/sync_sso`;
  const params = {
    external_id: 1,
    email: 'bob@example.com',
    username: 'bob',
    add_groups: 'eurorack',
    require_activation: true
  };
  const headers = {
    'Api-Key': config.discourse.apiKey,
    'Api-Username':  config.discourse.apiUsername,
    'Content-Type': 'multipart/form-data'
  };
  const sso = Buffer.from(qs.stringify(params)).toString('base64');
  const sig = getHash(sso, config.discourse.ssoSecret);
  return axios.post(endpoint, qs.stringify({ sso, sig }), { headers })
    .then(({ data }) => data)
    .catch(err => err);
}

안녕하세요, 위 코드를 제 노드 애플리케이션에서 시도해 보았으며, http://localhost:4200/?sso=bm9uY2U9OTRiNzM1ODU1NDUxOTBmNTE3YWE1NzM0YjA5MDFiODQmcmV0dXJuX3Nzb191cmw9aHR0cCUzQSUyRiUyRmxvY2FsaG9zdCUzQTMwMDAlMkZzZXNzaW9uJTJGc3NvX2xvZ2lu&sig=9fdb6d9f8bd91005d3612c476c91c2acbb650b5532feb9eb131405e2bbe0c0c2 로 리다이렉트되는 과정에서 잘 작동하고 있었습니다.

때로는 타임아웃이 발생하고, 때로는 “You’re all caught up!” 메시지가 표시됩니다.

몇 번 시도한 후로는 로컬호스트(localhost:4200)의 관리자 패널에조차 접근할 수 없게 되었으며, 계속 위 URL로 리다이렉트되고 있습니다.

이미 브라우저의 캐시와 쿠키를 삭제했습니다.

도와주세요.

항상 이 메시지만 표시됩니다. 로그인 버튼을 클릭해도 SSO 리다이렉트 URL로만 이동하여 관리자 패널에 접근할 수 없습니다.