我正在使用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搜索了它,但找不到原因。
答案 0 :(得分:0)
似乎唯一的问题是您需要将发布者(setIssuer
)设置为GitHub应用程序ID,而该ID可能不是4
。