是否有可能通过命令行而不是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以获取令牌。任何人都可以分享如何做到这一点的秘密吗?
答案 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生成的盐匹配!