Skip to content

Token authentication fails when creating a new environment #41

@stviaene-si

Description

@stviaene-si

What happened?

I ran the following:

conda auth login <url> -t <token>
conda env create -f environment.yml -n test

which results in:

conda_auth.exceptions.CondaAuthError: Unable to find authorization token for requests with channel ...

Conda Info

active environment : None
            shell level : 0
       user config file : /Users/stig/.condarc
 populated config files : /opt/homebrew/Caskroom/miniforge/base/.condarc
                          /Users/stig/.condarc
          conda version : 24.11.3
    conda-build version : not installed
         python version : 3.12.9.final.0
                 solver : libmamba (default)
       virtual packages : __archspec=1=m1
                          __conda=24.11.3=0
                          __osx=15.3.2=0
                          __unix=0=0
       base environment : /opt/homebrew/Caskroom/miniforge/base  (writable)
      conda av data dir : /opt/homebrew/Caskroom/miniforge/base/etc/conda
  conda av metadata url : None
           channel URLs : https://conda.anaconda.org/conda-forge/osx-arm64
                          https://conda.anaconda.org/conda-forge/noarch
          package cache : /opt/homebrew/Caskroom/miniforge/base/pkgs
                          /Users/stig/.conda/pkgs
       envs directories : /opt/homebrew/Caskroom/miniforge/base/envs
                          /Users/stig/.conda/envs
               platform : osx-arm64
             user-agent : conda/24.11.3 requests/2.32.3 CPython/3.12.9 Darwin/24.3.0 OSX/15.3.2 solver/libmamba conda-libmamba-solver/24.9.0 libmambapy/1.5.12
                UID:GID : 502:20
             netrc file : None
           offline mode : False

Conda Config

==> /opt/homebrew/Caskroom/miniforge/base/.condarc <==
channels:
  - conda-forge

==> /Users/stig/.condarc <==
channel_settings:
  - frozendict.frozendict({'channel': '...', 'auth': 'token'})

Conda list

# packages in environment at /opt/homebrew/Caskroom/miniforge/base:
#
# Name                    Version                   Build  Channel
archspec                  0.2.5              pyhd8ed1ab_0    conda-forge
backports                 1.0                pyhd8ed1ab_5    conda-forge
backports.tarfile         1.2.0              pyhd8ed1ab_1    conda-forge
boltons                   24.0.0             pyhd8ed1ab_1    conda-forge
brotli-python             1.1.0           py312hde4cb15_2    conda-forge
bzip2                     1.0.8                h99b78c6_7    conda-forge
c-ares                    1.34.4               h5505292_0    conda-forge
ca-certificates           2025.8.3             hbd8a1cb_0    conda-forge
certifi                   2025.8.3           pyhd8ed1ab_0    conda-forge
cffi                      1.17.1          py312h0fad829_0    conda-forge
charset-normalizer        3.4.1              pyhd8ed1ab_0    conda-forge
click                     8.2.2              pyh707e725_0    conda-forge
colorama                  0.4.6              pyhd8ed1ab_1    conda-forge
conda                     24.11.3         py312h81bd7bf_0    conda-forge
conda-auth                0.2.1              pyhd8ed1ab_0    conda-forge
conda-libmamba-solver     24.9.0             pyhd8ed1ab_0    conda-forge
conda-package-handling    2.4.0              pyh7900ff3_2    conda-forge
conda-package-streaming   0.11.0             pyhd8ed1ab_1    conda-forge
distro                    1.9.0              pyhd8ed1ab_1    conda-forge
fmt                       11.0.2               h420ef59_0    conda-forge
frozendict                2.4.6           py312h0bf5046_0    conda-forge
h2                        4.2.0              pyhd8ed1ab_0    conda-forge
hpack                     4.1.0              pyhd8ed1ab_0    conda-forge
hyperframe                6.1.0              pyhd8ed1ab_0    conda-forge
idna                      3.10               pyhd8ed1ab_1    conda-forge
importlib-metadata        8.7.0              pyhe01879c_1    conda-forge
importlib_resources       6.5.2              pyhd8ed1ab_0    conda-forge
jaraco.classes            3.4.0              pyhd8ed1ab_2    conda-forge
jaraco.context            6.0.1              pyhd8ed1ab_0    conda-forge
jaraco.functools          4.2.1              pyhd8ed1ab_0    conda-forge
jsonpatch                 1.33               pyhd8ed1ab_1    conda-forge
jsonpointer               3.0.0           py312h81bd7bf_1    conda-forge
keyring                   25.6.0             pyh534df25_0    conda-forge
krb5                      1.21.3               h237132a_0    conda-forge
libarchive                3.7.7                h3b16cec_3    conda-forge
libcurl                   8.12.1               h73640d1_0    conda-forge
libcxx                    19.1.7               ha82da77_0    conda-forge
libedit                   3.1.20250104    pl5321hafb1f1b_0    conda-forge
libev                     4.33                 h93a5062_2    conda-forge
libexpat                  2.6.4                h286801f_0    conda-forge
libffi                    3.4.2                h3422bc3_5    conda-forge
libiconv                  1.18                 hfe07756_1    conda-forge
liblzma                   5.6.4                h39f12f2_0    conda-forge
libmamba                  1.5.12               hdf44a08_0    conda-forge
libmambapy                1.5.12          py312h86ad8a2_0    conda-forge
libnghttp2                1.64.0               h6d7220d_0    conda-forge
libsolv                   0.7.30               h6c9b7f8_0    conda-forge
libsqlite                 3.49.1               h3f77e49_1    conda-forge
libssh2                   1.11.1               h9cc3647_0    conda-forge
libxml2                   2.13.6               hce475f1_0    conda-forge
libzlib                   1.3.1                h8359307_2    conda-forge
lz4-c                     1.10.0               h286801f_1    conda-forge
lzo                       2.10              h93a5062_1001    conda-forge
mamba                     1.5.12          py312h14bc7db_0    conda-forge
menuinst                  2.2.0           py312h81bd7bf_0    conda-forge
more-itertools            10.7.0             pyhd8ed1ab_0    conda-forge
ncurses                   6.5                  h5e97a16_3    conda-forge
openssl                   3.5.2                he92f556_0    conda-forge
packaging                 24.2               pyhd8ed1ab_2    conda-forge
pip                       25.0.1             pyh8b19718_0    conda-forge
platformdirs              4.3.6              pyhd8ed1ab_1    conda-forge
pluggy                    1.5.0              pyhd8ed1ab_1    conda-forge
pybind11-abi              4                    hd8ed1ab_3    conda-forge
pycosat                   0.6.6           py312hea69d52_2    conda-forge
pycparser                 2.22               pyh29332c3_1    conda-forge
pysocks                   1.7.1              pyha55dd90_7    conda-forge
python                    3.12.9          hc22306f_1_cpython    conda-forge
python_abi                3.12                    5_cp312    conda-forge
readline                  8.2                  h1d1bf99_2    conda-forge
reproc                    14.2.5.post0         h5505292_0    conda-forge
reproc-cpp                14.2.5.post0         h286801f_0    conda-forge
requests                  2.32.3             pyhd8ed1ab_1    conda-forge
ruamel.yaml               0.18.10         py312hea69d52_0    conda-forge
ruamel.yaml.clib          0.2.8           py312h0bf5046_1    conda-forge
setuptools                75.8.2             pyhff2d567_0    conda-forge
tk                        8.6.13               h5083fa2_1    conda-forge
tqdm                      4.67.1             pyhd8ed1ab_1    conda-forge
truststore                0.10.1             pyh29332c3_0    conda-forge
tzdata                    2025a                h78e105d_0    conda-forge
urllib3                   2.3.0              pyhd8ed1ab_0    conda-forge
wheel                     0.45.1             pyhd8ed1ab_1    conda-forge
yaml-cpp                  0.8.0                h13dd4ca_0    conda-forge
zipp                      3.23.0             pyhd8ed1ab_0    conda-forge
zstandard                 0.23.0          py312h15fbf35_1    conda-forge
zstd                      1.5.6                hb46c0d2_0    conda-forge

Additional Context

Looking into the code, I see this line calls manager.get_secret defined here. But that method only seems to check the cache, and doesn't actually go into storage. Replacing the get_secret implementation with

    def get_secret(self, channel_name: str) -> tuple[str | None, str | None]:
        secrets = self._cache.get(channel_name)

        if secrets is None:
            keyring_id = f"{PLUGIN_NAME}::{TOKEN_NAME}::{channel_name}"
            token = storage.get_password(keyring_id, USERNAME)
            if token is None:
                return None, None
            else:
                secrets = (USERNAME, token)

        return secrets

works and I can now create an environment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions