У меня есть проект, из которого я хочу скопировать несколько образов контейнеров в другой проект с помощью приложения узла. Для этого я использую модуль построения изображений-контейнеров. Копирование работает с учетными данными учетной записи службы, но я хочу использовать учетные данные учетной записи пользователя. Учетные данные 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 Обзор аутентификации настоятельно рекомендуется использовать учетную запись службы вместо учетной записи пользователя в вашем приложении, также в некоторых ситуациях учетные записи пользователей не разрешены в качестве метода аутентификации, это может быть причиной того, что вы не можете использовать учетную запись пользователя.