You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Enrollment Token生成正确的Protobuf Duration?

解决Enrollment Token自定义过期时间的BadRequest问题

问题描述

尝试创建当天过期的Enrollment Token时,调用Create接口返回BadRequest错误,提示enrollment_token.duration下的Seconds和Nanos字段不存在。调试发现返回的token中Duration字段为null,仅默认生成创建后1小时过期的ExpirationTimestamp。官方指南提及可自定义时长,但当前Enrollment Token创建接口文档中无Duration字段,怀疑该功能已废弃。

原代码:

// Calculate Duration
Timestamp now = Timestamp.FromDateTime(DateTime.UtcNow);
Timestamp tomorrow = Timestamp.FromDateTime(DateTime.Today.AddDays(1).ToUniversalTime());

// Create a token with a policy name. Whatever device provisioned with this token will use this policy
EnrollmentToken token = new EnrollmentToken();
token.PolicyName = policyID;
token.Duration = tomorrow - now;

// Build and execute a request to tie the token to our enterprise
EnterprisesResource.EnrollmentTokensResource.CreateRequest request = androidManagementService.Enterprises.EnrollmentTokens.Create(token, enterprise.Name);
var result = request.Execute();

原因分析

Android Management API已废弃Duration字段,当前创建Enrollment Token时需直接设置ExpirationTimestamp来指定过期时间,而非通过计算Duration的方式。官方指南可能未及时同步接口变更,导致出现文档与实际接口不一致的情况。

解决方案

直接给Enrollment Token的ExpirationTimestamp字段赋值为目标过期时间(当天结束的UTC时间),替换原有的Duration设置逻辑:

// 设置当天结束的UTC时间作为过期时间
Timestamp expirationTime = Timestamp.FromDateTime(DateTime.Today.AddDays(1).ToUniversalTime());

// 创建token并指定策略和过期时间
EnrollmentToken token = new EnrollmentToken();
token.PolicyName = policyID;
token.ExpirationTimestamp = expirationTime;

// 执行创建请求
EnterprisesResource.EnrollmentTokensResource.CreateRequest request = androidManagementService.Enterprises.EnrollmentTokens.Create(token, enterprise.Name);
var result = request.Execute();

这样设置后,生成的Enrollment Token会在当天结束时过期,同时避免了因使用废弃字段导致的BadRequest错误。

内容的提问来源于stack exchange,提问作者Maximilian Hung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:33:23