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

时间:2017-11-21 21:26:44

标签: gitlab access-token

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

我设法转储了流量,我发现在呈现的HTML模板中提供了令牌以响应POST请求:

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" />

然而,POST HTML Form似乎太脏了,然后解析生成的HTML以获取令牌。任何人都可以分享如何做到这一点的秘密吗?

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

也很脏,但是使用10.2,api / v4 / session命令消失了,所以通过基本身份验证登录是不可能的。如果您需要这个用于集成测试并且可以通过ssh访问创建的gitlab实例,您可以直接通过SQL插入令牌,令牌似乎不会被散列或加密,而是纯文本。

答案 2 :(得分:0)

如果您可以控制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生成的盐匹配!