Jgit Bug?即使通过UsernamePasswordCredentialsProvider传递了不正确的用户名,Git clone命令也能正常工作

gab6jxml  于 2023-03-28  发布在  Git
关注(0)|答案(2)|浏览(177)

当尝试用jgit克隆一个repo时,将错误的用户名传递给UsernamePasswordCredentialsProvider实际上并没有导致任何错误,这对我来说非常惊讶。为什么它能工作?当用户名不正确时,repo是如何被克隆的?用版本4.6.0.201612231935-r和6.5.0.202303070854-r尝试过
我有一个试图克隆git repo的函数,给定了用户名和访问令牌。当试图处理边缘情况的异常时,我注意到传递一个不正确的用户名,但为特定的git url和分支传递正确的访问令牌根本不会产生任何错误!

` return Git.cloneRepository()
          .setURI(repoDetailsModel.getRepoUrl())
          .setCredentialsProvider(
              new UsernamePasswordCredentialsProvider(
                      "INCORRECT_RANDOM_USER" , repoDetailsModel.getAccessToken()))
          .setDirectory(tempDir)
          .setBranchesToClone(Arrays.asList(REPO_BRANCH_PATH + repoDetailsModel.getRepoBranch()))
          .setBranch(REPO_BRANCH_PATH + repoDetailsModel.getRepoBranch())
          .call();`

但是传递不正确的访问令牌确实会给予预期的“未授权”错误。这是jgit库中的一个bug吗?只要访问令牌在设计上是正确的,UsernamePasswordCredentialsProvider是否允许匿名访问?

bjg7j2ky

bjg7j2ky1#

作为noted here,令牌可以单独使用,作为“用户名”。

String remoteUrl = "https://${token}@github.com/user/repo.git";
CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider("${token}", "");

只要令牌有效,用户名在您的情况下可能会被忽略。
JGit Authentication Explained”解释说:
请注意一件事,如果您使用OAuth访问令牌通过HTTPS访问GitHub存储库。
不需要在URL中指定令牌,而只需作为用户名提供。

z9ju0rcb

z9ju0rcb2#

JGit库只是将凭证发送到Git存储库,并决定什么是“错误”或“正确”。
正如this answer中所述,GitHub期望访问令牌作为用户名,而您尝试访问的存储库希望将其作为密码。GitHub忽略提供的密码,您的存储库不关心用户名。

相关问题