gpt4 book ai didi

ios - 设备检查API : Error: Unable to verify authorization token

转载 作者:行者123 更新时间:2023-11-29 05:27:02 25 4
gpt4 key购买 nike

我正在使用 Xcode10Swift 5SwiftJWT 生成 JSON Web token ,以便进行身份验证 设备检查API。下面是方法

let key8 = """
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCq...
-----END PRIVATE KEY-----
"""

let myHeader = Header(kid: m_key)
struct MyClaims: Claims {
let iat: Date
let iss: String
}

var jwt = JWT(header: myHeader, claims: MyClaims(iat: Date(timeIntervalSinceNow: 3600), iss: m_iss))
let privateKey = key8.data(using: .utf8)!
let rsaJWTEncoder = JWTEncoder(jwtSigner: JWTSigner.es256(privateKey: privateKey))
do {
let jwtString = try rsaJWTEncoder.encodeToString(jwt)

print("endcode header: \(jwtString)")
} catch {
print("Failed to encode JWT: \(error)")
}
}

得到的结果类似于eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIs...

使用上面的 header 连接Apple服务器。我不断收到来自 Apple 服务器的响应:401 无法验证授权 token

我还尝试从 jwt 创建 JSON Web token

但同样的错误。任何帮助,将不胜感激。提前致谢

最佳答案

我尝试了多种方法来解决该问题。但对我有用的是,这里逐步描述如何使用 DeviceCheck API 获取设备两位状态。

第 1 步 - 生成 token

let currentDevice = DCDevice.current
if currentDevice.isSupported {
currentDevice.generateToken(completionHandler: { (data, error) in
if let tokenData = data {
print("Token: \(tokenData)")
} else {
print("Error: \(error?.localizedDescription ?? "")")
}
})
}

第 2 步 - 访问和修改每设备数据

创建 APNs 身份验证 token 签名 key

1- 在您的开发者帐户中,转到 Certificates, Identifiers & Profiles .

2 - 在“键”下,选择“全部”,然后单击右上角的“添加”按钮 (+)。

3- 在“ key 描述”下,输入签名 key 的唯一名称。

4- 在“关键服务”下,选中“APN”复选框,然后单击“继续”。

5- 检查 key 配置,然后单击“确认”。

6- (可选)单击“下载”立即生成并下载 key 。如果您下载 key ,它将保存为文件扩展名为 .p8 的文本文件。将文件保存在安全的地方,因为 key 未保存在您的开发者帐户中,您将无法再次下载它。

7- 单击“完成”。

第 3 步 - 为查询请求创建有效负载

func generateJWTToken() -> String{

let key8 = """
-----BEGIN PRIVATE KEY-----

MIGTAgEAMBMGByqGSM49...
-----END PRIVATE KEY-----
"""

let myHeader = Header(kid: "2YHFSDF45")

let timeStamp = Date.currentTimeStamp
let teamId = "xyz"

let jwt = JWT(header: myHeader, claims: MyClaims(iat:timeStamp, iss: teamId))

let privateKey = key8.data(using: .utf8)!
let rsaJWTEncoder = JWTEncoder(jwtSigner: JWTSigner.es256(privateKey: privateKey))

do {
let jwtString = try rsaJWTEncoder.encodeToString(jwt)

//print(jwtString)

return jwtString
} catch {
print("Failed to encode JWT: \(error)")
}

return ""
}

第4步-查询DeviceCheckApi

要获取设备的两位状态,我们将使用 Alamofire 发出 HTTP 请求至 https://api.devicecheck.apple.com/v1/query_two_bits

    //MARK:- method call device check API
func callAppleDeviceCheckApi(_ token: String){

let mUrl : URL = NSURL(string: "https://api.devicecheck.apple.com/v1/query_two_bits") as! URL

let mHeaders = generateJWTToken()
let mDeviceToken = token
let mTimeStampMili = Date.currentTimeStampMili

let headers: HTTPHeaders = ["Authorization": "Bearer "+mHeaders,
"Content-Type" : "application/json"]

let params = ["device_token": mDeviceToken, "transaction_id": "dfgsdfgddfc", "timestamp": mTimeStampMili] as [String : Any]

var request = URLRequest(url: mUrl)
request.httpMethod = "POST"

request.headers = headers

request.httpBody = try! JSONSerialization.data(withJSONObject: params)
AF.request(request).responseString(){
response in

switch response.result {
case .success(let value):

let json = JSON(value)

//print("JSON: \(json)")

case .failure(let error):
print("ERROR: \(error)")

}
}
}

注意 - 浏览this & this为了更好地理解。

关于ios - 设备检查API : Error: Unable to verify authorization token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58062972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com