Защита учетных данных для частного репозитория R в .Rprofile

В отличие от python pip, R, похоже, предоставляет учетные данные, настроенные для частных репозиториев R, определенных в .Rprofile. Я полагаю, это связано с тем, что R обрабатывает строку как URL-адрес.

local({r <- getOption("repos")
       r["Nexus"] <- "https://username:password@my-private-r-repo.com/repository/r-group"
       options(repos=r)
})

Затем, когда я устанавливаю пакет:

> install.packages("shinydashboard")
trying URL 'https://username:password@my-private-r-repo.com/repository/r-group/bin/macosx/el-capitan/contrib/3.6/shinydashboard_0.7.1.tgz'
Content type 'application/x-tgz' length 326031 bytes (318 KB)
==================================================
downloaded 318 KB


The downloaded binary packages are in
    /var/folders/7_/pt_pgg2j531f2jc_n5znht600000gn/T//RtmpZkpXkN/downloaded_packages

Есть ли в R параметры конфигурации для предотвращения раскрытия учетных данных?

1 ответ

Я решил эту (и другие проблемы) с помощью renv и заголовка авторизации .
помогает создавать виртуальные среды для проектов R, блокируя все пакеты (и их версии), используемые в проекте.
Вы можете прочитать о заголовках аутентификации здесь: Web API Authentication Basic vs Bearer

Вы можете заставить renv работать с частными репозиториями, добавив.Rprofileфайл в проект следующим образом:

      source("renv/activate.R")
local({
  project_repos <- c(
    CRAN = "https://cloud.r-project.org",
    PRIVATE_CRAN = "https://your-private-cran.io"
    )

  options(repos = project_repos)
  options(
    renv.download.headers = function(url) {
      if (grepl(paste0("^", project_repos["PRIVATE_CRAN"]), url))
        return(c(Authorization = paste0("Bearer ", Sys.getenv("AUTH_TOKEN"))))
    })

Это будет автоматически добавлять заголовок авторизации каждый раз, когда вы получаете доступ к файлу из частной CRAN.
Если вы сделали все предварительные условия, установка пакета будет выглядеть так:

      > renv::install("private_packge@2.7.2")
Retrieving 'https://your-private-cran.io/Cran-local/src/contrib/Archive/private_packge/2.7.2/private_packge_2.7.2.tar.gz' ...
    OK [file is up to date]
Installing private_packge [2.7.2] ...
    OK [built from source]
Moving private_packge [2.7.2] into the cache ...
    OK [moved to cache in 1.3 milliseconds]

Предпосылки:

  1. Установите и настройте renvrenv для своего проекта.
  2. Ваш частный CRAN должен иметь возможность принимать заголовок авторизации.
  3. Маркер аутентификации хранится в переменной среды с именем .
  4. Обратите внимание, что я использую аутентификацию Bearer , это означает, что я получил выделенный токен из своего частного CRAN. Если вы хотите использовать , вам нужно использовать обычную аутентификацию и переменную среды с именемAUTH_TOKENдолжна быть кодировка base64username:password.
Другие вопросы по тегам