快速生成DeviceCheck API的授权承载令牌时遇到的问题

时间:2019-06-03 11:13:15

标签: ios swift devicecheck

我正在研究DeviceCheck。要生成JSON网络令牌,我正在使用SwiftJWT库。但是我不知道如何为JWT生成DeviceCheck

代码:

let contents = try String(contentsOfFile: filepath)
let headers = Header(kid: key_id)

struct MyClaims: Claims {
    var iss: String
    var iat: Date
    var exp: Date
}

let jwt = JWT(header: headers, claims: MyClaims(iss: iss_id, iat: Date(timeIntervalSinceNow: 3600), exp: Date(timeIntervalSinceNow: 3600)))
let privateKey = contents.data(using: .utf8)!
let rsaJWTEncoder = JWTEncoder(jwtSigner: JWTSigner.es256(privateKey: privateKey))

var jwtString =  try rsaJWTEncoder.encodeToString(jwt)

在打印JWT时,我得到了以下答复:

  

JWT(标头:SwiftJWT.Header(典型值:可选(“ JWT”)),算法:   可选(“ ES256”),jku:无,jwk:无,小子:可选(“ KEY_ID”),   x5u:无,x5c:无,x5t:无,x5tS256:无,cty:无,暴击:无),   声明:SwiftiOSDeviceCheck.ViewController。(位于的未知上下文   $ 104614dbc)。(未知上下文为$ 104614e28).MyClaims(iss:   “ ISS_ID”,日期:2019-06-03 11:55:53 +0000,到期日:2019-06-03 11:55:53   +0000))

并且从API中我得到了邮递员的以下响应:

无法验证授权令牌

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

我找到了这个问题的答案。我使用的是 CupertinoJWS ,而不是 SwiftJWT

let jwt = JWT(keyID: keyID, teamID: teamID, issueDate: Date(), expireDuration: 60 * 60)

    do {
        let token = try jwt.sign(with: p8Key)
        // Use the token in the authorization header in your requests connecting to Apple’s API server.
        // e.g. urlRequest.addValue(_ value: "bearer \(token)", forHTTPHeaderField field: "authorization")
        print("Generated JWT: \(token)")
        return token
    } catch {
        // Handle error
    }