我正在创建一项服务,该服务将管理用户的Google应用引擎应用。
用它最简单的形式。我正在尝试执行以下功能
用户点击该按钮。该请求将被重定向到谷歌进行oauth身份验证。用户将根据Google Apps域帐户进行身份验证。
例如:用户拥有qaleader@mycompany.com
google apps域帐户。
用户登录帐户。到目前为止一切正常。
我正在使用带有以下配置的passport-google-auth策略。
passport.use(new GoogleStrategy({
clientID: config.google.clientID,
clientSecret: config.google.clientSecret,
callbackURL: config.google.callbackURL
},
function(accessToken, refreshToken, profile, done) {
return done(null, profile);
}
));
客户端ID和客户端密钥是我的客户端ID和我正在构建的服务的秘密。
路线配置如下
// Setting the google oauth routes
router.route('/auth/google')
.get(passport.authenticate('google', {
failureRedirect: '/',
accessType: 'offline',
approvalPrompt: 'force',
scope: [
'profile',
'email',
'https://www.googleapis.com/auth/appengine.admin'
]
}));
在护照验证回调中,我收到用户个人资料以及访问令牌和刷新令牌。
身份验证流程正常。验证后,用户被重定向到主屏幕。在那里,我提供了一个更新应用引擎应用的按钮。 在按钮上单击我正在运行此命令
appcfg.py --oauth2_refresh_token=<token> update <path-of-application-to-update>
<token> Is the refreshToken I received in passport verify callback
<path-of-application-to-update> Is the local path of application to update.
运行此命令后,我在stdout中收到以下错误
2014-09-16 19:17:24,355 ERROR client.py:440 Failed to retrieve access token: {
"error" : "unauthorized_client"
}
在我的Google应用管理控制台中,我创建了一个虚拟应用程序。在身份验证类型下,我选择了Google Apps Domain
,我输入的域名为mycompany.com
。
使用子进程spawn从node.js运行该命令。
使用node.js构建完整的服务。