0

我正在尝试在 iOS11 中使用 Apple 的新 DeviceCheck 机制来实现免费试用机制。我已经在 RAILs 4 中实现了服务器部分。有相当多的代码,所以我把它放在一个要点中:https ://gist.github.com/jmfriend/b86f52f8f0649ad4cae176c08b77f000

我收到错误消息:“缺少或格式错误的授权令牌”。这表明我在为 AuthKey_#####.p8 文件生成 JWT 时做错了。

这段代码也在要点中,但为了便于参考,问题可能出在这就是处理 p8 文件的代码:

def auth_header
  # The authentication key must must use the ES256 algorithm and be in the Base 64 URL–encoded JSON web token format.
  # If your token doesn't use this format, you receive a BAD_AUTHENTICATION_TOKEN HTTP error.
  "Bearer #{auth_token}"
end

def auth_token
  @auth_token ||= fetch_auth_token
end

def fetch_auth_token
  header = {
      typ: "JWT", # Must be specified; not in documentation
      alg: "ES256",
      kid: key_id
  }

  body = {
      iss: team_id,
      iat: DateTime.now().to_time.to_i ,
      exp: DateTime.now().to_time.to_i + 43_200 # 12hrs     #    Time.now.to_i
  }

  authentication_token = JWT.encode(body, auth_key, 'ES256', header_files = header)
  authentication_token
end

def auth_key
  file = File.read(developer_token_file)
  key = OpenSSL::PKey::EC.new(file)
  key.check_key
  key
end
4

1 回答 1

0

在这种情况下,“缺少或格式错误的授权令牌”问题是由使用这样的应用程序标识符引起的:xxxx.com.companyname.subdomain.* 在使用您的应用程序的开发版本时。在您的应用程序的实时版本中,因为此应用程序 ID 最终是一个显式应用程序 ID,所以它可以工作。

我已经测试了通过使用与正常不同的配置文件来获取我的应用程序的开发版本以使用显式应用程序 ID。

'未能找到位状态' 事实证明,这只是意味着您尚未为此设备设置任何位。在设置其位之前,您无需验证设备。注意还将 RAIls 要点更新为实时运行的代码。

于 2018-02-05T17:36:54.643 回答