Я работаю над GitHub Apps apis, где мне нужно получить токены доступа, используя токен jwt для установки.
Я смог сгенерировать токен JWT из закрытого ключа, используя ссылка ,но когда я пытался сгенерировать токен доступа для установки через Почтальон , он говорит:
Запрос:
URL: https://api.github.com/app/installations/8/access_tokens
Авторизация: Носитель (токен JWT)
Принять: application / vnd.github.machine-man-preview + json
Ответ:
{
"message": "Integration must generate a public key",
"documentation_url": "https://developer.github.com/v3"
}
И код, который я использовал для генерации токена JWT, выглядит следующим образом:
String privKeyStr = "myprivatekey";
byte[] data = Base64.decodeBase64(privKeyStr);
/* Add PKCS#8 formatting */
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(new ASN1Integer(0));
ASN1EncodableVector v2 = new ASN1EncodableVector();
v2.add(new ASN1ObjectIdentifier(PKCSObjectIdentifiers.rsaEncryption.getId()));
v2.add(DERNull.INSTANCE);
v.add(new DERSequence(v2));
v.add(new DEROctetString(data));
ASN1Sequence seq = new DERSequence(v);
byte[] privKey = seq.getEncoded("DER");
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(privKey);
KeyFactory fact = KeyFactory.getInstance("RSA");
PrivateKey key = fact.generatePrivate(spec);
long nowMillis = System.currentTimeMillis();
long expiremilis = 60000l*5l;
Date now = new Date(nowMillis);
Date expireDate = new Date(nowMillis+expiremilis);
//retStr = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.RS256,key).compact();
String compactJws = Jwts.builder()
.setSubject("TestingApp")
.setIssuer("4")
.setIssuedAt(now)
.setExpiration(expireDate)
.signWith(SignatureAlgorithm.RS256,key)
.compact();
System.out.println(compactJws);
Я его погуглил, но не смог найти причину.