v0.1.6: фикс детекции имперсонации — isImpersonated вместо impersonatedCompanyId

This commit is contained in:
2026-06-22 23:20:18 +04:00
parent 25f53cf808
commit 5d292687ce
5 changed files with 36 additions and 4 deletions
+31
View File
@@ -0,0 +1,31 @@
const fs = require('fs');
const https = require('https');
const TOKEN = fs.readFileSync(__dirname + '/token.txt', 'utf8').replace(/\s/g, '');
function fetchJson(url) {
return new Promise((resolve) => {
https.get(url, {
headers: { Authorization: 'Bearer ' + TOKEN, Accept: 'application/json' }
}, res => {
let data = '';
res.on('data', c => data += c);
res.on('end', () => {
console.log('Status:', res.statusCode);
try { console.log(JSON.stringify(JSON.parse(data), null, 2)); }
catch(e) { console.log('RAW:', data.substring(0, 2000)); }
resolve();
});
}).on('error', e => { console.log('Error:', e.message); resolve(); });
});
}
(async () => {
console.log('=== 1. auth-api /auth/user ===');
await fetchJson('https://auth-api.ngcloud.ru/api/v1/auth/user');
console.log('');
console.log('=== 2. lk-api-gateway /iam/auth/user ===');
await fetchJson('https://lk-api-gateway.ngcloud.ru/api/v1/iam/auth/user');
console.log('');
console.log('=== 3. auth-api /impersonation/status ===');
await fetchJson('https://auth-api.ngcloud.ru/api/v1/impersonation/status');
})();
+1
View File
@@ -0,0 +1 @@
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhdXRoLWFwaSIsInN1YiI6IjAxOWQ3NmM1LTQyNGMtN2MyYy04OWI3LWUzZjA5OTQ5YTk4ZiIsImV4cCI6MTc4MjE5ODU2NywiaWF0IjoxNzgyMTU1MzY3LCJqdGkiOiI4Njk1N2I4OS1hYmYzLTRkM2UtYjc5Ni1jNjYzZjE2N2EwNDkiLCJhdXRoX3RpbWUiOjAsInR5cCI6IiIsImF6cCI6IiIsInNlc3Npb25fc3RhdGUiOiIiLCJhY3IiOiIiLCJhbGxvd2VkLW9yaWdpbnMiOm51bGwsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6bnVsbH0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpudWxsfX0sInNjb3BlIjoiIiwic2lkIjoiIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoiIiwiQ2xpZW50SUQiOiJXWjAxMTEyIiwiY29tcGFueV9pZCI6IjhlYzcwYWMwLTU0NmQtNDJhNy04Y2ZmLTMzOWM4ZmI1MWEyMyIsImNvbXBhbnlfbmFtZSI6ItCe0J7QniDCq9Cd0KPQkdCV0KHCuyIsInRva2VuX3R5cGUiOiJhY2Nlc3MiLCJpZHBfdXNyX3VpZCI6IjAxOWQ3NmM1LTQyNGMtN2MyYy04OWI3LWUzZjA5OTQ5YTk4ZiIsImxvZ2luIjoibnRhemV0ZGlub3ZAbnViZXMucnUiLCJmaXJzdG5hbWUiOiLQndCw0LjQu9GMIiwibWlkZGxlbmFtZSI6ItCkIiwibGFzdG5hbWUiOiLQotCw0LfQtdGC0LTQuNC90L7QsiIsImdyb3VwcyI6bnVsbCwicHJlZmVycmVkX3VzZXJuYW1lIjoiIiwiZ2l2ZW5fbmFtZSI6IiIsImZhbWlseV9uYW1lIjoiIiwiZW1haWwiOiJudGF6ZXRkaW5vdkBudWJlcy5ydSJ9.MAkUzbgZYlJFc4aVqRlcxl6Zgv45e5mdJZq9UcCITiXVNtHFSqz9FtptNoeLy7XAYzvI3GMit7YNm_OUxYR_pZYY5W0hg4Gn68U0-nlGd3KaDMjX3QFuYJphQCLBYlkpiiuniju38MINcx6ccFXCW-_uEz7AC5UvQN8doQBr4YTGSNjvLaou13Vpqpz1b8XTaUp1S2gTHqcSJ-1-qxR8MgBguUNzPgZ384YTS7sZSJ3OXucgSrVHtaq5c7r-N7TzUuOqdAPND5bvOs47h17QftPhdVOI-pL8pqtnOTU3jsId01H8tI4u3lzDoet_cIK2cQVGu7J1zJlHOxwQOv8Xtw
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "ipwhitelist", "name": "ipwhitelist",
"version": "0.1.5", "version": "0.1.6",
"description": "IP WhiteList microservice for cloud provider", "description": "IP WhiteList microservice for cloud provider",
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
+1 -1
View File
@@ -8,7 +8,7 @@
// ═══════════════════════════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════════════════════════
module.exports = { module.exports = {
version: '0.5.178', version: '0.1.6',
// ── IAM ────────────────────────────────────────────────────────────────── // ── IAM ──────────────────────────────────────────────────────────────────
iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user', iamUrl: process.env.V2_IAM_URL || 'https://auth-api.ngcloud.ru/api/v1/auth/user',
+2 -2
View File
@@ -53,7 +53,7 @@ async function checkImpersonation(token, req, u) {
const imp = data.impersonation || {}; const imp = data.impersonation || {};
const newIsImp = !!(imp.is_impersonated); const newIsImp = !!(imp.is_impersonated);
const oldIsImp = !!(u.originalUserEmail && u.impersonatedCompanyId); const oldIsImp = !!u.isImpersonated;
// Статус не изменился — ничего не делаем // Статус не изменился — ничего не делаем
if (newIsImp === oldIsImp) return; if (newIsImp === oldIsImp) return;
@@ -98,7 +98,7 @@ async function checkImpersonation(token, req, u) {
} }
function applyContext(req, u) { function applyContext(req, u) {
const isImpersonated = !!(u.originalUserEmail && u.impersonatedCompanyId); const isImpersonated = !!(u.isImpersonated || u.originalUserEmail);
req.email = u.email || ''; req.email = u.email || '';
req.clientId = isImpersonated req.clientId = isImpersonated