如何将私钥添加到Google语音转文字API的指定curl命令?能否在网页/Mac运行?
解决Google语音转文字操作查询的认证与运行问题
我来帮你搞定这两个实际开发中常见的问题:
一、如何整合服务账号私钥到curl命令的认证流程
你当前的curl命令依赖gcloud的默认应用凭证生成访问令牌,但如果要使用下载的服务账号私钥文件(JSON格式),有两种简单可靠的方式:
方法1:通过环境变量让gcloud自动读取私钥
这是最省心的方式,不需要改动原curl命令:
- 打开终端,设置环境变量指向你的私钥文件路径:
把路径替换成你实际的私钥文件位置,比如export GOOGLE_APPLICATION_CREDENTIALS="/Users/yourname/Downloads/your-service-key.json"~/Documents/keys/speech-api-key.json。 - 直接运行你原来的curl命令就行——
gcloud auth application-default print-access-token会自动识别这个环境变量,用私钥生成有效的访问令牌,授权逻辑完全不用改。
方法2:不依赖gcloud,直接用私钥生成令牌
如果不想装gcloud SDK,可以用OpenSSL和jq手动生成OAuth2令牌:
- Mac上先安装jq(用Homebrew:
brew install jq),OpenSSL是系统自带的。 - 运行以下命令生成访问令牌(替换私钥路径):
# 从私钥文件提取关键信息 PRIVATE_KEY=$(cat /path/to/your/service-key.json | jq -r '.private_key') CLIENT_EMAIL=$(cat /path/to/your/service-key.json | jq -r '.client_email') # 生成JWT并请求令牌 JWT_HEADER=$(echo -n '{"alg":"RS256","typ":"JWT"}' | base64 -w 0) JWT_CLAIMS=$(echo -n "{ \"iss\":\"$CLIENT_EMAIL\", \"scope\":\"https://www.googleapis.com/auth/cloud-platform\", \"aud\":\"https://oauth2.googleapis.com/token\", \"exp\":$(($(date +%s)+3600)), \"iat\":$(date +%s) }" | base64 -w 0 | tr '/+' '_-' | tr -d '=') JWT_SIGNATURE=$(echo -n "$JWT_HEADER.$JWT_CLAIMS" | openssl dgst -sha256 -sign <(echo -n "$PRIVATE_KEY") | base64 -w 0 | tr '/+' '_-' | tr -d '=') ACCESS_TOKEN=$(curl -s -X POST "https://oauth2.googleapis.com/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=$JWT_HEADER.$JWT_CLAIMS.$JWT_SIGNATURE" | jq -r '.access_token') - 把生成的令牌代入原curl命令:
记得把curl -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json; charset=utf-8" \ "https://speech.googleapis.com/v1/operations/your-operation-name"your-operation-name换成你收到的实际操作ID。
二、能否在网页或Mac系统中运行该命令?
- Mac系统: 完全没问题!Mac自带的终端(Terminal)就能直接执行这些curl命令。只要你按上面的要求准备好私钥文件,或者装好了必要的工具(gcloud、jq),直接在终端里敲命令就行。
- 网页: 绝对不建议这么做,而且技术上也走不通。一方面,浏览器的跨域策略会直接阻止你向Google API发送请求;更关键的是,服务账号私钥是极其敏感的核心凭证,如果放到网页代码里,任何人都能拿到并操控你的Google Cloud资源,风险高到离谱。如果要在网页里查询操作状态,必须通过你自己的后端服务中转,由后端处理认证和API请求。
内容的提问来源于stack exchange,提问作者Tom Piccirillo
相关产品推荐
相关产品推荐

