当尝试用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
是否允许匿名访问?
2条答案
按热度按时间bjg7j2ky1#
作为noted here,令牌可以单独使用,作为“用户名”。
只要令牌有效,用户名在您的情况下可能会被忽略。
“JGit Authentication Explained”解释说:
请注意一件事,如果您使用OAuth访问令牌通过HTTPS访问GitHub存储库。
不需要在URL中指定令牌,而只需作为用户名提供。
z9ju0rcb2#
JGit库只是将凭证发送到Git存储库,并决定什么是“错误”或“正确”。
正如this answer中所述,GitHub期望访问令牌作为用户名,而您尝试访问的存储库希望将其作为密码。GitHub忽略提供的密码,您的存储库不关心用户名。