Lee*_*ker 13 node.js dart google-oauth flutter
我在我的应用程序上使用了 Google Sign-in:相关代码大致如下:
var acc = await signInService.signIn();
var auth = await acc.authentication;
var token = auth.idToken;
Run Code Online (Sandbox Code Playgroud)
这给了我一个很好的长令牌,然后我使用 HTTP POST 将其传递给我的后端(这工作正常),然后尝试验证。我在我的颤振树和后端服务器(nodejs/restify)上有相同的 google-services.json 文件。后端代码大致如下:
let creds = require('./google-services.json');
let auth = require('google-auth-library').OAuth2Client;
let client = new auth(creds.client[0].oauth_client[0].client_id);
. . .
let ticket = await client.verifyIdToken({
idToken: token,
audience: creds.client[0].oauth_client[0].client_id
});
let payload = ticket.getPayload();
Run Code Online (Sandbox Code Playgroud)
这始终会返回我的错误“错误的收件人,有效负载受众!= requiredAudience”。
我也尝试过单独注册 GCP 控制台并使用这些键/client_id,但结果相同。我在哪里可以找到可以正确验证此令牌的有效 client_id?
小智 9
另一个快速解决方案可能是将参数“audience”的名称更改为“requiredAudience”。这对我有用。如果你从谷歌复制代码,也许谷歌文档已经过时了。
client.verifyIdToken({
idToken,
requiredAudience: GOOGLE_CLIENT_ID, // Specify the CLIENT_ID of the app that accesses the backend
// Or, if multiple clients access the backend:
//[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]
});
Run Code Online (Sandbox Code Playgroud)
这里的问题是client_id用于创建 OAuth2Client 的 和client_id用作audience的verifyIdToken是相同的。在client_id为audience应该是client_id这是在您的前端应用来获得id_token。
以下是来自 Google 文档的示例代码。
const {OAuth2Client} = require('google-auth-library');
const client = new OAuth2Client(CLIENT_ID);
async function verify() {
const ticket = await client.verifyIdToken({
idToken: token,
audience: CLIENT_ID, // Specify the CLIENT_ID of the app that accesses the backend
// Or, if multiple clients access the backend:
//[CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]
});
const payload = ticket.getPayload();
const userid = payload['sub'];
// If request specified a G Suite domain:
//const domain = payload['hd'];
}
verify().catch(console.error);
Run Code Online (Sandbox Code Playgroud)
这是文档的链接。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
4847 次 |
| 最近记录: |