Возникла проблема при создании токена канала авторизации для DeviceCheck API в swift - PullRequest
2 голосов
/ 03 июня 2019

Я работаю над 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"), alg: необязательный ("ES256"), jku: ноль, jwk: ноль, ребенок: необязательный ("KEY_ID "), x5u: ноль, x5c: ноль, x5t: ноль, x5tS256: ноль, cty: ноль, крит: ноль), утверждения: SwiftiOSDeviceCheck.ViewController. (Неизвестный контекст в $ 104614dbc). (Неизвестный контекст в $ 104614e28).MyClaims (iss: "ISS_ID", iat: 2019-06-03 11:55:53 +0000, exp: 2019-06-03 11:55:53 +0000))

ииз API я получаю ответ ниже в почтальоне:

Невозможно проверить токен авторизации

Как я могу исправить эту проблему?

1 Ответ

1 голос
/ 17 июня 2019

Я нашел ответ на этот вопрос. Я использовал 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
    }
...