poetry icon indicating copy to clipboard operation
poetry copied to clipboard

Private registry dependencies using API token

Open danieleades opened this issue 4 years ago • 5 comments

  • [ ] I am on the latest Poetry version.
  • [x] I have searched the issues of this repo and believe that this is not a duplicate.
  • [x] If an exception occurs when executing a command, I executed it again in debug mode (-vvv option).
  • ubuntu 18.04
  • poetry 1.0.5

Issue

Apologies for the brevity of this description, i'm not in front of my machine right now. There may be a very simple answer to this question.

Are private pypi registries accessible using the API token, rather than username/password? I see that API token support for the public pypi registry was added in #1275, was this intended to also provide support for non-public registries?

  • we have an Artifactory-hosted pypi registry
  • we can use poetry with this registry using username and password authentication
  • we cannot use API token authentication with this registry
  • we have security concerns with using username/password authentication
  • other tools (such as twine) are able to access this registry using the API token, rather than username/password

I guess i'm asking if some part of the API token authentication implementation is hardcoded to the public pypi registry?

If it is intended that this should work, what diagnostic information can I provide, or debugging steps can I follow?

(note that i'm lagging a couple of releases on the poetry version. Please let me know if there's any changes that could affect this that are undocumented in the changelog)

danieleades avatar Jun 10 '20 17:06 danieleades

we have a similar setup and poetry (>=1) works fine with a PAT. You can use the following command:

poetry config http-basic.foo $PAT "" (where pat goes in place of the user name)

https://python-poetry.org/docs/repositories/

Persedes avatar Jun 11 '20 13:06 Persedes

@Persedes if that works that is a massive help!

I'm going to tentatively say that this is still a bug. there's a documented solution using the api token that doesn't work-

poetry config pypi-token.$REPO $TOKEN

and an undocumented solution which allegedly does work

poetry config http-basic.$REPO $TOKEN ""

danieleades avatar Jun 11 '20 13:06 danieleades

@danieleades I'm of the opinion the documentation is a little unclear. However it seems to work for multiple users:

There are steps provided here in #910, specifically https://github.com/python-poetry/poetry/issues/910#issuecomment-484963046

For what it's worth, I was able to get a poetry to publish to a pywharf container backed by the local filesystem using this approach, with the exception that I provide the repo name as the username, e.g., with the repo "mypypi" and secret "foo":

user@host > poetry config repositories.mypypi http://localhost:8888/simple/                                                                                                                                                          
user@host > poetry config http-basic.mypypi mypypi foo
user@host > poetry publish -r mypypi

jdeyton avatar Jul 26 '20 22:07 jdeyton

I have encountered this issue also. Is anybody planning to work on resolving this?

matt-long-92 avatar Feb 03 '22 11:02 matt-long-92

I could not make poetry (v1.1.14) authenticate with private repo api token by using the cli either.

My current workaround is:

  • adding the repo with poetry config repositories.myrepo https://youraddress
  • manually edit the poetry global auth file (mine is at ~/.config/pypoetry/auth.toml) by adding this section:
[http-basic]

# possibly other repos are here

[http-basic.myrepo]
username = "__token__"  # literally this, it's not a placeholder
password = "mysecrettoken"  # the api token goes here

After that poetry can authenticate successfully and without further user interaction.

I could not replicate this working config by any combination of http-basic / pypi-token.

CarloDePieri avatar Aug 02 '22 09:08 CarloDePieri

For jfrog artifiactory specifically try generating a token for your user

[http-basic]
[http-basic.ag-dev]
username = "USERNAME"
password = "YOUR_TOKEN"

charterchap avatar Mar 15 '23 15:03 charterchap