首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自NSData的DeviceCheck令牌(目标C)

来自NSData的DeviceCheck令牌(目标C)
EN

Stack Overflow用户
提问于 2017-09-23 16:29:49
回答 1查看 1K关注 0票数 1

使用新的DeviceCheck应用程序接口-我使用以下命令生成一个令牌:

代码语言:javascript
复制
[DCDevice.currentDevice generateTokenWithCompletionHandler:^(NSData * _Nullable token, NSError * _Nullable error)

我正在使用签名的JWT成功地进行身份验证,以:

代码语言:javascript
复制
https://api.development.devicecheck.apple.com/v1/validate_device_token

但得到的回应是:

代码语言:javascript
复制
Missing or incorrectly formatted device token payload

以下是有效负载的示例:

代码语言:javascript
复制
{"device_token":"0200000072912.......<rest of tokenString>","transaction_id":"ac61b285-4420-4b7e-a750-fef2b9f3419c","timestamp":1506150851000}

因此,我的问题是-如何从NSData获取令牌-这些方法都不起作用:

代码语言:javascript
复制
NSString *tokenString = [[token description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
          tokenString = [tokenString stringByReplacingOccurrencesOfString:@" " withString:@""];


NSString *tokenString = [token base64EncodedStringWithOptions:0];


const unsigned *tokenBytes = [token bytes];
NSString *tokenString = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                        ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                        ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                        ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];



NSMutableString *hexToken;
const unsigned char *iterator = (const unsigned char *) [token bytes];
hexToken = [[NSMutableString alloc] init];
for (NSInteger i = 0; i < token.length; i++)
{
   [hexToken appendString:[NSString stringWithFormat:@"%02lx", (unsigned long) iterator[i]]];
}
NSString *tokenString = [NSString stringWithString:hexToken];

苹果开发者论坛帮不上忙--我找到的唯一另一个问题是令牌在一分钟内过期--我会在几秒钟内发布到服务器上。

我正在使用Java HttpPost -并使用以下命令添加有效负载:

代码语言:javascript
复制
StringEntity params = new StringEntity(jsonPayload);

httpPost.setEntity(params);

如果我将时间戳修改为秒而不是毫秒,我会得到一个关于时间戳的错误,所以我假设我正确地获得了服务器的有效负载。

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-10-05 02:02:10

好的,选项2是正确的答案:

代码语言:javascript
复制
NSString *tokenString = [token base64EncodedStringWithOptions:0];

服务器响应可能具有误导性-请注意,相同的响应:

代码语言:javascript
复制
Missing or incorrectly formatted device token payload

如果您多次尝试使用相同的transaction_id发布JSON有效负载,或者多次发送相同的device_token (如果已经返回200 ),则可能会返回。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46377626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档