Назад | Перейти на главную страницу

Как мы можем иметь учетные данные одного пользователя для доступа к нескольким проектам?

У меня есть проект, из которого я хочу скопировать несколько образов контейнеров в другой проект с помощью приложения узла. Для этого я использую модуль построения изображений-контейнеров. Копирование работает с учетными данными учетной записи службы, но я хочу использовать учетные данные учетной записи пользователя. Учетные данные Oauth позволяют копировать только изображения в рамках проекта, но не в нескольких проектах, поскольку учетные данные OAuth ограничиваются одним проектом для каждого приложения. Есть ли другое решение, чтобы я мог использовать учетную запись пользователя? Пробовал следующее:

app.get('/demo',function(req,res){
        imageCopy();
        ...
    });

app.listen(8080);


async function imageCopy(){
  var imgName = 'us.gcr.io/myProj/hello-world';
  var trgtImg = 'us.gcr.io/targetProj/hello-world';
  var _clientOptions = {
    clientId: "xxxx.apps.googleusercontent.com",
    clientSecret: "yyyy",
    redirectUri: "https://domain/XYZ"
  }
  var auth =  imgBuilder.auth(imgName,"push,pull",{
    'us.gcr.io':{
        clientOptions: _clientOptions      
    }
  });
  auth.then(async function(credentials){   
    const image = new imgBuilder.Image(imgName,trgtImg,credentials);
    const result = await image.save(['dev-latest']);    
    console.log(result);
  });  

}

а также извлек токен и отправил тот же

 var auth = new google.auth.OAuth2(
          config.google.clientId,
          config.google.clientSecret,
          config.google.redirectUri
 };

 function initialize(appRouter, serviceListener)
{
    log.debug('initialize');  
    appRouter.get('/XYZ/login',renderLoginPage);    
    appRouter.get('/XYZ', proceed );

    listener = serviceListener;
}

function renderLoginPage(req, res){
        res.render('auth.html',{ 
          title: "xxxx",
          ....
          login_btn_description: "Login with Google",
          login_link: generateGoogleURL()
           });
}

function generateGoogleURL(){
     return auth.generateAuthUrl({
          access_type: 'offline',
          prompt: 'consent',
          scope: appScope
        });
}

function proceed(req,res){
  const qs = new url.URL(req.url,config.devhostname);
  const code = qs.searchParams.get('code');  
  getGoogleAccountFromCode(code).then(function(){
   imageCopy();
    ...
  }).catch(console.error);

}

async function getGoogleAccountFromCode(code) {
        const data = await auth.getToken(code);
        tokens = data.tokens;
        auth.setCredentials(tokens)
}

async function imageCopy(){
  var imgName = 'gcr.io/myProj/hello-world';
  var trgtImg = 'gcr.io/trgtProj/hello-world';
  const image = new authParam.Image(imgName,trgtImg,{'gcr.io':{
      clientOptions: tokens
     }
    });
    const result = await image.save(['dev-latest']);       
}

Учетные данные Oauth ограничены для одного проекта, поэтому какие учетные данные учетной записи пользователя мне следует использовать?

Как вы можете видеть в Google Обзор аутентификации настоятельно рекомендуется использовать учетную запись службы вместо учетной записи пользователя в вашем приложении, также в некоторых ситуациях учетные записи пользователей не разрешены в качестве метода аутентификации, это может быть причиной того, что вы не можете использовать учетную запись пользователя.