我有一个项目,我想使用节点应用程序将几个容器映像复制到另一个项目。我使用容器映像生成器模块。复制适用于服务帐户凭据,但我想使用用户帐户凭据。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 凭证仅限于单个项目,所以我应该使用什么用户帐户凭证?
答案1
正如你在 Google 上看到的身份验证概述强烈建议在您的应用中使用服务帐户而不是用户帐户,另外在某些情况下,用户帐户不允许作为身份验证方法,这可能是您不能使用用户帐户的原因。