我试图验证从云调度器cron作业对服务器(在云运行时)进行的API调用。
我想用一个服务帐户来做这个。
注意:这都发生在同一个项目中。
参考资料:
这就是我正在做的:
我转到https://console.cloud.google.com/apis/credentials并创建了一个新的服务帐户。我已经将角色分配为owner
。
步骤2-创建cron作业。
我访问https://console.cloud.google.com/cloudScheduler,像往常一样创建cron作业。
在service account
字段中,我将我的服务帐户发送电子邮件。在vaturey
字段中,我放入了我的项目id,因为在某个时候,我得到了一个错误,说它希望它是我的项目id的名称。
这是错误:
Firebase ID令牌有不正确的“AUD”(受众)声明。应为“project_id”
步骤3-运行作业并识别解码令牌:
这是我的服务器上的代码:
import * as admin from "firebase-admin";
admin.initializeApp({
credential: admin.credential.cert(
// THIS IS THE DEFAULT FIREBASE-ADMIN SERVICE ACCOUNT
// THAT IS AUTOMATICALLY CREATED BY FIREBASE
SERVICE_ACCOUNT as admin.ServiceAccount
)});
// THIS IS THE CODE THAT IS INSIDE MY SERVER TRYING TO VERIFY THE SERVICE ACCOUNT
try {
const authHeader = req.headers.authorization;
console.log(`authHeader: ${authHeader}`);
if (authHeader) {
const idToken = authHeader.split(" ")[1]; // GETS THE USER ID TOKEN
const decodedToken = await admin.auth().verifyIdToken(idToken);
console.log(`decodedToken: ${decodedToken}`);
}
}
这是我目前得到的错误:
Firebase ID令牌有不正确的“ISS”(颁发者)声明。应为“https://securetoken.google.com/”my-project-id“,但得到了”https://accounts.google.com“。请确保ID令牌来自与用于验证此SDK的服务帐户相同的Firebase项目。有关如何检索ID令牌的详细信息,请参阅https://Firebase.google.com/docs/auth/admin/verify-id-tokens。
我做这件事的方式有什么问题吗?我不应该使用firebase-admin对此吗?
我应该使用google-auth-library
来验证令牌吗?
经过一个上午的地狱般的调试,以下是我的发现。
似乎firebase-admin
的admin.auth().verifyidToken()
只适用于从firebase
SDK生成的令牌。
我通过直接使用google-auth-library
使其工作。
我做了以下工作。
注意:代码的其余部分是相同的(使用与问题中描述的相同的服务帐户):
import { OAuth2Client } from "google-auth-library";
export const apiExpressRouteHandler: RequestHandler = async (req, res) => {
try {
const PROJECT_ID = process.env.PROJECT_ID;
const authHeader = req.headers.authorization;
if (authHeader) {
const client = new OAuth2Client(PROJECT_ID);
const ticket = await client.verifyIdToken({
idToken: authHeader.split(" ")[1],
audience: PROJECT_ID
});
// LOGGING ticket PROPERTIES
console.log(`userId: ${JSON.stringify(ticket.getUserId())}`);
console.log(`payload: ${JSON.stringify(ticket.getPayload())}`);
console.log(`envelope: ${JSON.stringify(ticket.getEnvelope())}`);
console.log(`attributes: ${JSON.stringify(ticket.getAttributes())}`);
}
// REST OF THE CODE
}
}
catch(err) {
// ...
}
我不确定是否需要PROJECT_ID
来用new OAuth2Client(PROJECT_ID)
初始化客户机,但它是这样工作的。
在任何给定的POD中,服务帐户令牌被挂载在位置。 /var/run/secrets/kubernetes.io/serviceaccount/token 我想了解这个令牌是如何签名的。Kubernetes在签名此令牌时使用什么密钥?如何访问有助于脱机签名验证的公钥 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt-我尝试使用与此证书关联的公钥
我的团队目前正在开发一个应用程序,使用Admin SDK在GCP中列出公司的域用户,用于入职和非入职目的。 我们使用一个服务帐户来完成这个任务,并且在Google Admin's advanced settings中添加了 作用域。管理SDK API被激活,我们可以在凭据区域中看到服务帐户。 当我们使用参数 和 调用https://www.googleapis.com/admin/director
我正在使用Node js验证到Azure AD以创建Data Lake存储帐户,它会登录,但对于帐户创建,它会给出错误:代码:'Invalid验证令牌租户',消息:'访问令牌来自错误的发行者\'https://sts.windows.n et\'。它必须匹配与此子描述关联的租户\'https://sts.windows.net/\'。
我的网站有一个问题。结帐时,我得到内部服务器错误。我已经阅读了论坛上甚至这个论坛上提供的几乎所有解决方案,但没有一个被证明能解决这个问题。下面是错误日志。 注意:id调用不正确。不应直接访问订单属性。回溯:require('wp-blog-header.php')、require_once('wp-includes/template loader.php')、include('/themes/as
我正在尝试使用API将成员添加到组中。我在谷歌脚本工具中编写代码,但是,我收到了错误消息: 我已经在G套件域中添加了作用域,我已经创建了服务帐户、API密钥、OAuth 2.0密钥。我的要求是: 遗漏了什么,或者我做错了什么?我已经阅读了所有的文档,仍然不知道出了什么问题。
最近更改了azure订阅,我需要在azure DevOps–服务连接中添加相同的订阅。当尝试为更改的订阅创建新的服务连接时,我发现以下错误- 查询服务连接API失败:'https://management.azure.com/subscriptions/{id}/resourcegroups? api- 版本=2016-02-01'。状态代码:“未经授权”,来自服务器的响应:“{”错误“{”代码“