Jgit使用错误用户名搭配正确访问令牌克隆仓库未报错问题咨询
关于Jgit使用错误用户名+正确访问令牌克隆仓库无报错的疑问
在使用Jgit克隆Git仓库时,向UsernamePasswordCredentialsProvider传入错误用户名但正确的访问令牌,并未触发任何错误,该现象已在4.6.0.201612231935-r和6.5.0.202303070854-r版本中测试验证。
编写了基于用户名和访问令牌克隆仓库的函数,测试异常场景时发现:针对特定Git地址和分支,传入错误用户名但正确访问令牌完全不会报错,代码示例如下:
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在设计上允许只要访问令牌正确就可访问?
这不是Jgit的Bug,而是多数Git托管平台的访问令牌认证逻辑导致的:这些平台处理HTTP Basic认证时,仅验证访问令牌的有效性,对用户名字段不做严格校验。
具体来说,当用访问令牌走HTTP Basic认证流程时,平台会忽略用户名字段(甚至可以填任意字符串、空值),只检查密码部分的访问令牌是否合法。这就是为什么错误用户名+正确令牌能正常克隆,而令牌错误会触发未授权错误的原因。
Jgit的UsernamePasswordCredentialsProvider只是按照HTTP Basic认证的规范,把用户名和令牌拼接成username:token格式做Base64编码后发送给服务器,认证逻辑完全由Git托管服务器决定,Jgit本身不会额外校验用户名和令牌的对应关系。
内容的提问来源于stack exchange,提问作者Deepika Karanji
相关产品推荐
相关产品推荐

