为 Apple Music 创建开发者令牌 API
Creating A Developer Token For Apple Music API
我目前正在尝试为 MusicKit API 创建开发人员令牌,我有以下内容:
10 位 Team-Id,10 位 Key-Id,一个 .p8 AuthKey 文件。所有这些都是有效的。我尝试使用以下代码生成令牌:
JavaScript 在 VSCode:
"use strict";
const fs = require("fs");
const jwt = require("jsonwebtoken");
const privateKey = fs.readFileSync("AuthKey.p8").toString();
const teamId = "ABCDEFGHIJ";
const keyId = "1234567891";
const jwtToken = jwt.sign({}, privateKey, {
algorithm: "ES256",
expiresIn: "180d",
issuer: teamId,
header: {
alg: "ES256",
kid: keyId
}
});
console.log(jwtToken);
Python(来自 github 的 pelauimagineering 生成器代码,稍作调整)
import datetime
import jwt
//not a real private key but it looks something like this
secret = """-----BEGIN PRIVATE KEY-----
asdfg1rty5GSM49AgEGCCqGSM49AwEHBHkwdwIBAQQguWRXMHYkuFImkMGByqEPT
jaXQyO0WK1BjYpuDxIgNQ5nHRRFCuUOi8mgCgYIKoZIzj0DAQehcp0+Z+jwRANCAA
RCBFg8fL08QS36Fb8HmY+eFrDWMO00w5unCo5n8VyLhvttIZeByXlVsJrK/L3f/
F2wYmZme
-----END PRIVATE KEY-----"""
teamId = "ABCDEFGHIJ";
keyId = "1234567891"
alg = 'ES256'
time_now = datetime.datetime.now()
time_expired = datetime.datetime.now() + datetime.timedelta(hours=12)
headers = {
"alg": alg,
"kid": keyId
}
payload = {
"iss": teamId,
"exp": int(time_expired.timestamp()),
"iat": int(time_now.timestamp())
}
if __name__ == "__main__":
"""Create an auth token"""
token = jwt.encode(payload, secret, algorithm=alg, headers=headers)
print("----TOKEN----")
print(token)
然而,从两个脚本生成的令牌 return 一个 HTTP 401,我做错了什么?还有其他我可以尝试的脚本吗?我错过了任何额外的要求吗? (除了 Team-ID、Key-ID 和 AuthKey.p8)我已经在这方面工作了一段时间,所以非常感谢您的帮助! :D
这是我使用的脚本。上周刚用它来重新启动我的开发人员令牌。我是一名 iOS 开发人员(不是 Python 开发人员),所以我无法真正排除故障。我只知道它有效。
# requires pyjwt (https://pyjwt.readthedocs.io/en/latest/)
# pip install pyjwt
import datetime
import jwt
secret = """
-----BEGIN PRIVATE KEY-----
blah...CqGSM...49AwEH...BHkwdw...IBAQQgRESoq...etc
-----END PRIVATE KEY-----
"""
keyId = "myKeyId" # https://developer.apple.com/account/ios/authkey/
teamId = "myTeamId" # https://developer.apple.com/account/#/membership/
alg = "ES256"
time_now = datetime.datetime.now()
time_expired = datetime.datetime.now() + datetime.timedelta(hours = 4320) #180d
headers = {
"kid": keyId,
"alg": alg
}
payload = {
"iss": teamId,
"iat": int(time_now.strftime("%s")),
"exp": int(time_expired.strftime("%s"))
}
if __name__ == "__main__":
"""Create an auth token"""
token = jwt.encode(payload, secret, algorithm = alg, headers = headers)
print "\n----TOKEN----"
print token
print "\n----CURL----"
print "curl -v -H 'Authorization: Bearer %s' \"https://api.music.apple.com/v1/catalog/us/artists/36954\" \n" % (token)
#end
我 运行 遇到了同样的问题,请确保您的 AuthKey.p8 文件在一行中包含密钥。
你的看起来像这样:
-----BEGIN PRIVATE KEY-----
asdfg1rty5GSM49AgEGCCqGSM49AwEHBHkwdwIBAQQguWRXMHYkuFImkMGByqEPT
jaXQyO0WK1BjYpuDxIgNQ5nHRRFCuUOi8mgCgYIKoZIzj0DAQehcp0+Z+jwRANCAA
RCBFg8fL08QS36Fb8HmY+eFrDWMO00w5unCo5n8VyLhvttIZeByXlVsJrK/L3f/
F2wYmZme
-----END PRIVATE KEY-----
什么时候应该是这样的:
-----BEGIN PRIVATE KEY-----
asdfg1rty5GSM49AgEGCCqGSM49AwEHBHkwdwI...
-----END PRIVATE KEY-----
我目前正在尝试为 MusicKit API 创建开发人员令牌,我有以下内容: 10 位 Team-Id,10 位 Key-Id,一个 .p8 AuthKey 文件。所有这些都是有效的。我尝试使用以下代码生成令牌:
JavaScript 在 VSCode:
"use strict";
const fs = require("fs");
const jwt = require("jsonwebtoken");
const privateKey = fs.readFileSync("AuthKey.p8").toString();
const teamId = "ABCDEFGHIJ";
const keyId = "1234567891";
const jwtToken = jwt.sign({}, privateKey, {
algorithm: "ES256",
expiresIn: "180d",
issuer: teamId,
header: {
alg: "ES256",
kid: keyId
}
});
console.log(jwtToken);
Python(来自 github 的 pelauimagineering 生成器代码,稍作调整)
import datetime
import jwt
//not a real private key but it looks something like this
secret = """-----BEGIN PRIVATE KEY-----
asdfg1rty5GSM49AgEGCCqGSM49AwEHBHkwdwIBAQQguWRXMHYkuFImkMGByqEPT
jaXQyO0WK1BjYpuDxIgNQ5nHRRFCuUOi8mgCgYIKoZIzj0DAQehcp0+Z+jwRANCAA
RCBFg8fL08QS36Fb8HmY+eFrDWMO00w5unCo5n8VyLhvttIZeByXlVsJrK/L3f/
F2wYmZme
-----END PRIVATE KEY-----"""
teamId = "ABCDEFGHIJ";
keyId = "1234567891"
alg = 'ES256'
time_now = datetime.datetime.now()
time_expired = datetime.datetime.now() + datetime.timedelta(hours=12)
headers = {
"alg": alg,
"kid": keyId
}
payload = {
"iss": teamId,
"exp": int(time_expired.timestamp()),
"iat": int(time_now.timestamp())
}
if __name__ == "__main__":
"""Create an auth token"""
token = jwt.encode(payload, secret, algorithm=alg, headers=headers)
print("----TOKEN----")
print(token)
然而,从两个脚本生成的令牌 return 一个 HTTP 401,我做错了什么?还有其他我可以尝试的脚本吗?我错过了任何额外的要求吗? (除了 Team-ID、Key-ID 和 AuthKey.p8)我已经在这方面工作了一段时间,所以非常感谢您的帮助! :D
这是我使用的脚本。上周刚用它来重新启动我的开发人员令牌。我是一名 iOS 开发人员(不是 Python 开发人员),所以我无法真正排除故障。我只知道它有效。
# requires pyjwt (https://pyjwt.readthedocs.io/en/latest/)
# pip install pyjwt
import datetime
import jwt
secret = """
-----BEGIN PRIVATE KEY-----
blah...CqGSM...49AwEH...BHkwdw...IBAQQgRESoq...etc
-----END PRIVATE KEY-----
"""
keyId = "myKeyId" # https://developer.apple.com/account/ios/authkey/
teamId = "myTeamId" # https://developer.apple.com/account/#/membership/
alg = "ES256"
time_now = datetime.datetime.now()
time_expired = datetime.datetime.now() + datetime.timedelta(hours = 4320) #180d
headers = {
"kid": keyId,
"alg": alg
}
payload = {
"iss": teamId,
"iat": int(time_now.strftime("%s")),
"exp": int(time_expired.strftime("%s"))
}
if __name__ == "__main__":
"""Create an auth token"""
token = jwt.encode(payload, secret, algorithm = alg, headers = headers)
print "\n----TOKEN----"
print token
print "\n----CURL----"
print "curl -v -H 'Authorization: Bearer %s' \"https://api.music.apple.com/v1/catalog/us/artists/36954\" \n" % (token)
#end
我 运行 遇到了同样的问题,请确保您的 AuthKey.p8 文件在一行中包含密钥。 你的看起来像这样:
-----BEGIN PRIVATE KEY-----
asdfg1rty5GSM49AgEGCCqGSM49AwEHBHkwdwIBAQQguWRXMHYkuFImkMGByqEPT
jaXQyO0WK1BjYpuDxIgNQ5nHRRFCuUOi8mgCgYIKoZIzj0DAQehcp0+Z+jwRANCAA
RCBFg8fL08QS36Fb8HmY+eFrDWMO00w5unCo5n8VyLhvttIZeByXlVsJrK/L3f/
F2wYmZme
-----END PRIVATE KEY-----
什么时候应该是这样的:
-----BEGIN PRIVATE KEY-----
asdfg1rty5GSM49AgEGCCqGSM49AwEHBHkwdwI...
-----END PRIVATE KEY-----