ОШИБКА API токенов доступа к приложению GitHub: при интеграции должен быть создан открытый ключ - PullRequest
0 голосов
/ 18 февраля 2019

Я работаю над 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);

Я его погуглил, но не смог найти причину.

1 Ответ

0 голосов
/ 18 февраля 2019

Похоже, что единственная проблема здесь в том, что вам нужно установить эмитент (setIssuer) для идентификатора приложения GitHub, который, вероятно, не равен 4.

...