heroku CLI 通过令牌进行身份验证

Posted

技术标签:

【中文标题】heroku CLI 通过令牌进行身份验证【英文标题】:heroku CLI auth by token 【发布时间】:2020-07-17 03:56:58 【问题描述】:

每次从 Gitlab 注册表构建 docker 映像并将其推送到 Heroku 注册表后,我都需要执行 heroku container:release web 到 Heroku 运行映像(发布),但我想自动执行此操作

我将 heroku CLI 工具安装添加到 gitlab-ci-yml,但我无法通过令牌验证 heroku CLI 当我尝试设置 HEROKU_API_KEY=token 并运行 heroku login 时出现错误 Error: Cannot log in with HEROKU_API_KEY set 还尝试使用 HEROKU_DEBUG 执行此操作,但调试器信息无法帮助我 我不能使用~/.netrc

有什么方法可以验证 heroku CLI 或自动在 heroku 中发布 docker 映像?

当前 gitlab-ci.yml:

before_script:
    - apt install snapd
    - snap install --classic heroku
    - HEROKU_API_KEY=$HEROKU_API_TOKEN heroku login
    - docker login -u $REGISTRY_UNAME -p $REGISTRY_PWD registry.gitlab.com
    - docker login --username=_ --password=$HEROKU_PWD registry.heroku.com
script:
    # a lot of tag & push lines
    - heroku container:release web

【问题讨论】:

我可能遗漏了一些东西。如果您已经设置了 API 密钥,为什么还要登录? 【参考方案1】:

如果您设置了HEROKU_API_KEY 环境变量,则不必再次登录。 API 密钥将用于 Heroku CLI 命令(如果存在)。

确保使用heroku authorizations:create 创建永不过期的令牌。查看this 了解详细说明。

参考:https://github.com/heroku/cli/issues/502#issuecomment-309099883

请注意,gitgit push heroku master 命令不会使用 API 密钥。请参阅this 了解更多信息。

【讨论】:

不,我不使用 heroku 的 git。我只是在 gitlab CI 中构建我的图像,然后 gitlab 的 CI 将它交付给 heroku。但是在我执行heroku container:release web 之前,heroku 不会开始运行图像。我为身份验证创建了 heroku 令牌,但 gitlab 的运行器无法在 heroku 中进行身份验证(执行heroku container:release web),错误为Error: Cannot log in with HEROKU_API_KEY set @sula 正如我在回答中提到的,如果您已经拥有 API 密钥,则无需执行 heroku login 尝试运行 HEROKU_API_KEY=never-expiring-token heroku container:release web 时遇到错误:提供的凭据无效。错误:无法使用 HEROKU_API_KEY 设置登录 命令失败:heroku 登录。尝试运行 export HEROKU_API_KEY=never-expiring-token 然后 heroku container:release web 得到同样的错误。也尝试使用永不过期的令牌并得到相同的错误【参考方案2】:

通过更改导致令牌更改和重新创建新令牌的帐户密码解决了问题 然后再次运行HEROKU_API_KEY=token heroku container:release web 成功

【讨论】:

以上是关于heroku CLI 通过令牌进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

更改密码后 Heroku CLI 中的身份验证失败

通过令牌进行身份验证,如果令牌失败,则通过会话进行身份验证,使用 Passport?

基于令牌的身份验证的安全性

JWT 身份验证:使用 UI 令牌对 Graphene/Django (GraphQL) 查询进行身份验证?

通过 laravel API 使用 firebase 令牌身份验证

如何针对 Firebase 验证身份验证令牌?