我似乎一些根本问题在我的 GitLab 实例中的某个地方,或者我没有正确理解项目访问令牌的用途。一些背景:我为多个不同的客户维护多个不同的项目,其中包含任意文件。应该允许客户克隆或下载他们自己的个人存储库,但不允许其他存储库,并且无需在 GitLab 实例中创建“真实”用户帐户。
这看起来像是一个完美的用例部署或者项目访问令牌。部署令牌似乎按预期工作:使用https://_token_customer_reader:PASSWD@SERVER/ORG/bin/releases/CUSTOMER-1.git
某些 Git 客户端的客户可以使用特制的 URL()来克隆存储库。根据我的测试,禁止使用相同令牌访问其他存储库。但是,部署令牌不允许 Web 浏览器下载,只允许克隆。
另一方面,项目访问令牌允许使用某些 Web 浏览器 ( https://SERVER/api/v4/projects/138/repository/archive.zip?private_token=PASSWD&sha=prod
) 进行下载,因为可以授予这些浏览器对 GitLab API 的访问权限。但是:根据我对 Git 客户端和浏览器的测试,一个令牌允许访问我的 GitLab 实例中的所有其他存储库。只需更改 URL 中的项目 ID 以及可能的分支名称或提交哈希,但下载会成功,并且内容可能不同。
我有点确定,当我第一次想到这些方法时,事情并不是那样运作的,但我当然可能是错的。另一方面,所有关于项目访问令牌的文档都谈到了单个令牌,事物的范围仅限于某个项目,整个概念只有在针对每个项目时才对我有意义。此外,部署令牌在克隆时的行为与预期一致,与项目访问令牌相比,唯一的区别似乎是它们的通用性较差。
那么,项目访问令牌对于其他不相关项目的权限应该如何工作呢?