使用 JWT 获取 Apple Music SDK 的 userToken 时出错

Posted

技术标签:

【中文标题】使用 JWT 获取 Apple Music SDK 的 userToken 时出错【英文标题】:Error getting a userToken for Apple Music SDK with JWT 【发布时间】:2017-10-13 01:50:40 【问题描述】:

我尝试使用来自 JWT 的 developerToken 获取 Apple Music SDK 的 userToken,但未成功。我使用了 pelauimagineering/apple-music-token-generator,我可以获得一个有效的静态 userToken。但是苹果建议做动态,所以我想再次使用 JWT。

有人可以告诉我我的代码有什么问题吗?谢谢

func fetchDeveloperToken() -> String? 
   func fetchDeveloperToken() -> String? 
    let iat = Date().timeIntervalSince1970
    let days = TimeInterval(24*60*60*120) //120 days
    let exp = TimeInterval(iat + days)
    let kid = "TBESJXXXXX"
    let iss = "KQ6Z6XXXXX"
    let alg = "ES256"
    let secret = "MIGTAgEAMBMGByqEU7ZHQsoVfmKCCxS5W6BnCgCgYIKoZIzj0AAQcggNoN7dTkNG/8timkkf+Z2toogAqN41YgOXXXXXXXXXXXXXXXXXXsecretkey"
    let header:[AnyHashable:Any] = ["alg":alg, "kid":kid]
    let payload:[AnyHashable:Any] = ["iss": iss,
                                     "iat": iat,
                                     "exp": exp]
    let algorithm256 = JWTAlgorithmHS256()
    return JWT.encodePayload(payload, withSecret: secret, withHeaders: header, algorithm: algorithm256)

【问题讨论】:

【参考方案1】:

Apple 要求您使用 ES256 算法,而不是 HS256,我也遇到了同样的问题。如您所见here,您使用的 JWT 库不支持 ES256。列出的 ios 上唯一支持它的其他库是 this one

【讨论】:

用上面的代码,我可以生成一个字符串,在终端运行命令: curl -v -H 'Authorization: Bearer [developer token]' "api.music.apple.com/v1/catalog/us/songs/203709340" 我可以得到有效与 api.music.apple.com 连接,我可以让我的应用程序正常工作。但。是一个静态字符串,苹果不推荐使用它......并且有一个固定的到期日期。 :( @Fri3ndlyGerman 但是你是如何在 iOS 中添加这个库的?这使用 Swift 包管理器和 :/ 只是想让您和其他来这里的人知道:jwt.io 显示的信息似乎是错误的。它说 Vapor/JWT 将支持 ES256,但显然不支持:在此处查看此问题 github.com/vapor/jwt/issues/92 现在至少有两个纯 Swift 库支持 ES256:github.com/IBM-Swift/Swift-JWT.git 和 github.com/klaas/CupertinoJWT

以上是关于使用 JWT 获取 Apple Music SDK 的 userToken 时出错的主要内容,如果未能解决你的问题,请参考以下文章

获取库播放列表艺术品 Apple Music API

网易云/QQ音乐导入Apple Music

签名验证失败 - Apple 使用 Firebase JWT 登录

Apple Music 流派选择屏幕

连接到 Apple Music

iOS 如何让 UISlider 和 UIButton 像 Apple 的 Music 应用一样?