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

如何从命令行获取GitLab个人访问令牌,gitlab,access-token,Gitlab,Access Token,是否有可能通过命令行而不是web界面获取GitlabAPI的个人访问令牌?我正在进行一些集成测试,Gitlab部署到干净的环境中是测试会话设置的一部分。部署测试后,用户正在使用GitlabAPI进行一些工作。为了访问API,测试用户需要提供个人访问令牌 我成功地转储了流量,我看到在呈现的HTML模板中提供了令牌,以响应POST请求: 00:06:40.616996 IP6 localhost.amanda > localhost.53808: Flags [P.], seq 1:580,

是否有可能通过命令行而不是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" />


然而,发布HTML表单,然后解析生成的HTML以获取令牌似乎太脏了。任何人都可以分享如何正确操作的秘密吗?

基于HTML解析的解决方法:

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

如果您可以控制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/
以了解更多
装置
目录,并将此初始化放在其他地方

注2:
gitlab存储库中的原始文件对我不起作用b/c它被设计用于开发模式,而
require
对我来说失败了。另外,
token\u digest
是硬编码的,不会与GitLab生成的salt匹配

我试图在SQL中重新创建一个令牌,但它似乎只对特定的Gitlab实例有效。如果我从头开始创建另一个,它将变得无效。我怀疑还有一个与/etc/gitlab/gitlab-secrets.json的链接,用于salt之类的东西。。。顺便说一下,如果您尝试添加SQL,也不要忘记更新相应的序列。Ie:
选择pg_catalog.setval('public.personal_access_tokens_id_seq',1,true)我需要用于集成测试的令牌值,并且我可以访问运行Gitlab的容器。知道如何查询数据库中的令牌吗?