当前位置: 首页 > 知识库问答 >
问题:

GitHub应用程序访问令牌API错误:集成必须生成公钥

蒲寂离
2023-03-14

我正在研究GitHub应用程序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"
    }
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个答案

谷梁嘉运
2023-03-14

看起来这里唯一的问题是您需要将颁发者(setissuer)设置为您的GitHub应用程序ID,它很可能不是4

 类似资料:
  • 我正在尝试生成访问令牌来收集领英数据。我按照领英API文档中提供的说明进行了操作。我在开发人员页面中创建了一个应用程序并获得了以下内容: 使用API密钥,我生成了带有URL的authorization_code: https://www.linkedin.com/uas/oauth2/authorization?response_type=code 但是当我最终尝试使用以下URL生成访问令牌时,我

  • 当我尝试使用以下命令生成访问令牌时: 它抛出的错误为: {“error_description”:“缺少必需的参数,包括无效的参数值,参数多次。:无法检索访问令牌:appId或重定向uri与授权码不匹配或授权码过期”,“error”:“invalid_request”}。 你能在这个问题上指导我吗?

  • 在此处输入图像描述我创建了Sandbox developer docusign帐户以将Salesforce与docusign集成,我正在使用此文档链接验证docusign,即。https://developers.docusign.com/esign-rest-api/guides/authentication/oauth2-code-grant 我能够成功地生成授权代码,但在生成用于生成的访问令

  • 我一直在尝试使用简单的REST客户端以及Mozilla的REST插件。我收到“HTTP/1.1 401未授权”响应,正文中带有“{”error:“unauthorized_client”、“error_description”:“客户端未授权”}。 我已经成功获取了auth码,下面是访问令牌的POST请求,(范围r_fullprofile) https://www.linkedin.com/uas

  • 我有访问令牌和刷新令牌。但是访问令牌过期后几个时间,所以我想从刷新令牌为谷歌驱动器API生成访问令牌。所以给我的想法或代码,从谷歌驱动器API刷新令牌生成访问令牌。

  • https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=your_app_client_id&response_type=code&redirect_uri=https%3a%2f%2flogin.microsoftonline.com%2fcommon%2foauth2%2fnativeclient&res