如何在R-plumber中实现基本身份验证?

rur96b6h  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(129)

我在R-Plumber中内置了一个API。我想在此API中添加基本身份验证(即用户名和密码)。我该怎么做?

yhuiod9q

yhuiod9q1#

我已经弄清楚了如何使用R Plumber中提供的req对象来实现基本身份验证。
我们将从req$HTTP_AUTHORIZATION访问Basic Authentication参数,然后使用base64 decode将它们解码为username:password格式,然后拆分字符串以检索用户名和密码。
此外,编写一个函数来验证用户凭据是否有效。

# Define the authentication logic

auth_basic <- function(username, password) {
  # Check if the username and password are valid
  valid_credentials <- username == "hello" && password == "user123"
  
  # Return TRUE if the credentials are valid, FALSE otherwise
  return(valid_credentials)
}

#* @get /secured
function(req, res) {
  
  library(base64enc)
  encoded_string <- req$HTTP_AUTHORIZATION  
  encoded_string <- gsub("Basic ", "",encoded_string)
  decoded_string <- rawToChar(base64decode(what = encoded_string))
  username <- strsplit(decoded_string, ":")[[1]][1]
  password <- strsplit(decoded_string, ":")[[1]][2]
  
  cat("decoded string: ", decoded_string, "username: ", username, "password: ", password)
  
  if(is.na(username) | is.na(password)){
    return("credentials not provided")
  }
  
  if(auth_basic(username, password) == FALSE){
    return("invalid credentials")
  }
  
  return("This is a secured endpoint")

}

相关问题