【发布时间】:2019-02-19 12:34:14
【问题描述】:
我正在开发 GitHub Apps apis,我需要使用 jwt 令牌获取访问令牌以进行安装。
我能够使用 link 从私钥生成 JWT 令牌,但是当我尝试通过 Postman 为安装生成访问令牌时,它说:
请求:
网址: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);
我用谷歌搜索了它,但找不到原因。
【问题讨论】:
标签: java github jwt rsa github-api