如何从命令行获得GitLab个人访问令牌



是否有可能通过命令行而不是Web接口获得Gitlab API的个人访问令牌?我正在研究一些集成测试,而Gitlab部署到干净的环境中是测试会话设置的一部分。部署测试后,用户正在使用Gitlab API进行一些工作。为了访问API,测试用户需要提供个人访问令牌。

我设法转储流量,我看到在响应POST请求的渲染的HTML模板中提供了令牌:

00:06:40.616996 IP6 localhost.amanda > localhost.53808: Flags [P.], seq 1:580, ack 1054, win 497, options [nop,nop,TS val 3133641719 ecr 3133641673], length 579
`..U.c.@................................'`.0...y.eIz.....k.....
........HTTP/1.1 302 Found
Server: nginx
Date: Tue, 21 Nov 2017 21:06:40 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 119
Connection: keep-alive
Cache-Control: no-cache
Location: http://localhost:10080/profile/personal_access_tokens
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Request-Id: 88178813-95ad-419a-b56b-5a5ddb183885
X-Runtime: 0.044209
X-Ua-Compatible: IE=edge
X-Xss-Protection: 1; mode=block
X-Accel-Buffering: no

内部响应深处:

<input type="text" name="created-personal-access-token" id="created-personal-access-token" value="j1WZujuaKVVEkh8h8Fej" readonly="readonly" class="form-control js-select-on-focus" aria-describedby="created-personal-access-token-help-block" />

但是,发布HTML形式,然后解析HTML以获取令牌似乎也很脏。谁能分享秘密如何做正确的?

基于html解析的解决方法:https://github.com/vitalyisaev2/gitlab_token

如果您控制了如何部署Docker容器,则在本地保存此文件:

# Inspired by https://gitlab.com/gitlab-org/gitlab/-/blob/master/db/fixtures/development/25_api_personal_access_token.rb
# frozen_string_literal: true
puts "=======================================".color(:red)
puts "---------------------------------------".color(:red)
puts "Creating api access token for root user".color(:red)
puts "---------------------------------------".color(:red)
puts "=======================================".color(:red)
token = PersonalAccessToken.new
token.user_id = User.find_by(username: 'root').id
token.name = 'api-token-for-testing'
token.scopes = ["api"]
token.set_token('ypCa3Dzb23o5nvsixwPA')
token.save
print 'OK'

并修改您的docker-compose.yml以包括

        image: gitlab/gitlab-ee
        volumes:
          - ./25_api_personal_access_token.rb:/opt/gitlab/embedded/service/gitlab-rails/ee/db/fixtures/production/25_api_personal_access_token.rb

这对我有用。初始化GitLab容器后,我可以看到我通过使用Python库导入我的测试数据并对运行的Gitlab实例运行一堆集成测试。

注1:我正在上面使用gitlab ee,但是您可以探索/opt/gitlab/embedded/service/gitlab-rails/以获取更多fixtures目录,然后将此初始化放置在其他地方。

注2:GitLab存储库中的原始文件对我不起作用B/C,其设计用于开发模式,require对我失败。另外,token_digest是硬编码的,并且与您的gitlab不会匹配盐!

dirty也是肮脏的,但是使用10.2 api/v4/session命令消失了,因此不可能通过基本auth登录。如果您需要它进行集成测试,并且可以通过SSH访问创建的gitlab实例,则可以直接通过SQL插入令牌,该令牌似乎没有被散布或隐瞒,而是纯文本。

gitlab 15.1(五年后的2022年6月)现在提出

使用API

通过ID检索PAT>

用户现在可以通过PAT ID检索其个人访问令牌(PATS)。

以前,用户只能使用API列出其所有个人访问令牌。没有终点可以支持它们一个一个。

感谢Andreas Deicha的贡献!

请参阅文档和问题。

最新更新