我试图通过从命令行发布简单的http请求来开始使用Google IOT核心。
我在Console中设置了我的注册表和设备,并添加了公钥。我设置了一个遥测主题。我使用私钥生成了使用我发现的Qt应用程序的JWT。我使用https://cloud.google.com/iot/docs/how-tos/http-bridge指定的程序。我的命令是:
卷曲-X POST -H'授权:承载eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJzeWx2YW4tam91cm5leS0xOTU4MTUiLCJleHAiOiIxNTIwMzU4NjMyIiwiaWF0IjoiMTUxOTc1MzgzMiJ9.kDkwtWvfAE + AOYT2cObgh8Mux2n1DOuek1KR0YrsFSI =' -H' content-type:application / json' --data' {" binary_data":" SGVsbG8 ="}' -H'缓存控制:no-cache' ' https://cloudiotdevice.googleapis.com/v1/projects/sylvan-journey-195815/locations/europe-west1/registries/MyDeviceRegistry/devices/FirstDevice:publishEvent'
当我尝试发布命令时,我收到错误401"请求缺少必需的身份验证凭据。预期的OAuth 2访问令牌,登录cookie或其他有效的身份验证凭据"
我不知道在哪里看。我的JWT有问题吗?命令格式错了吗?我是否需要将公钥添加到注册表或仅添加到设备。我如何找出错误的原因?
非常感谢任何指导
答案 0 :(得分:0)
一些想法:
您是如何注册设备的?如果设备已注册证书已过期,则可能会遇到身份验证问题。
以下Python代码是我如何从命令行生成JWT,用于假设RSA256密钥对Curl测试HTTP端点:
import datetime
import jwt
import requests
algorithm = 'RS256'
cloud_region = 'your-cloud-region'
device_id = 'your-device-id'
private_key_file = 'path/to/rsa_private.pem'
project_id = 'your-project-id'
registry_id = 'your-registry-id'
token = {
# The time the token was issued.
'iat': datetime.datetime.utcnow(),
# Token expiration time.
'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=60),
# The audience field should always be set to the GCP project id.
'aud': project_id
}
# Read the private key file.
with open(private_key_file, 'r') as f:
private_key = f.read()
print(jwt.encode(token, private_key,
algorithm=algorithm).decode('ascii'))