Apple の DeviceCheck API を使用しようとしています。401 Unable to verify authorization token
いくつかの小さなバリエーションを試してみましたが、失敗しないリクエストを作成することはできないようです。
import java.security.KeyFactory
import java.security.spec.PKCS8EncodedKeySpec
import java.util.Base64
import io.jsonwebtoken.{Jwts, SignatureAlgorithm}
val deviceCheckPrivateKey = "<Key in plaintext without the key-guards>"
val privateKey = KeyFactory.getInstance("EC").generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder.decode(deviceCheckPrivateKey)))
val builder = Jwts
.builder()
.setHeaderParam("kid", "<key-id-from-file>")
.signWith(SignatureAlgorithm.ES256, privateKey)
.claim("iss", "<team-id>")
.claim("iat", System.currentTimeMillis())
println(builder.compact())
このスクラッチ ファイルの出力を取得して、ここに接続します。
curl -i -H "Authorization: Bearer <Output>" -X POST --data-binary @ValidQueryRequest.json https://api.development.devicecheck.apple.com/v1/query_two_bits
Apple のドキュメントで推奨されているとおりです。
全体の構造はこれで合っていますか?この構造化を意味するこのチュートリアルに従おうとしています:
しかし、Apple からのこの宣伝文句:
クエリ エンドポイントと更新エンドポイントに送信する各要求には、認証キーを含む認証ヘッダーを含める必要があります。認証キーは ES256 アルゴリズムを使用し、Base 64 URL エンコードされた JSON Web トークン形式である必要があります。トークンがこの形式を使用していない場合、BAD_AUTHENTICATION_TOKEN HTTP エラーが発生します。
キーを使用して署名するのではなく、リクエストに「認証キーを含める」必要があることを示唆しています。