GitHub App访问令牌API错误:集成必须生成一个公共密钥

时间:2019-02-18 13:26:06

标签: java github jwt rsa github-api

我正在使用GitHub Apps api,需要在其中使用jwt令牌获取访问令牌。

我能够使用link从私钥生成JWT令牌,但是当我尝试通过 Postman 为安装生成访问令牌时,它说:

请求:

  

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);

我用Google搜索了它,但找不到原因。

1 个答案:

答案 0 :(得分:0)

似乎唯一的问题是您需要将发布者(setIssuer)设置为GitHub应用程序ID,而该ID可能不是4