【问题标题】:How to use httr correctly for X-WSSE Authentification?如何正确使用 httr 进行 X-WSSE 身份验证?
【发布时间】:2017-11-02 13:45:52
【问题描述】:

我正在尝试连接到API of emarsys。他们使用 X-WSSE 作为身份验证方法,我被卡住了,需要弄清楚我做错了什么。我试图按要求制作标题,但我不知道哪里出错了。我非常感谢您的 cmets!

install.packages("httr")
install.packages("digest")
library("httr") 
library("digest")

# prepare userdata
username     <- "customer001"
secretkey    <- "supersecretkey"
timestamp    <- format(as.POSIXlt(Sys.time(), "UTC"), "%Y-%m-%dT%H:%M:%SZ")
nonce        <- digest(random(8), length=16)

# passworddigest
pwd       <- paste0(nonce, timestamp, secretkey) 
pwd       <- digest::sha1(pwd, algo="sha1", serialize=FALSE)  
pwd       <- jsonlite::base64_enc(charToRaw(pwd)) 

URL_base     <- "https://api.emarsys.net/api/v2/"
URL_endpoint <- "contact/settings"
URL          <- paste0(URL_base,URL_endpoint)

# create header 
header <- c(paste0('UsernameToken ',
                   'Username="', username, '", ',
                   'PasswordDigest="', pwd,'", ',
                   'Nonce="', nonce, '", ',
                   'Created="', timestamp,'"'))
# name header
names(header) <- 'X-WSSE:'    

# make httr request   
response <- GET(URL, add_headers(.headers = header))
response

http-header 应该如下所示:

X-WSSE: UsernameToken Username="customer001", PasswordDigest="ZmI2ZmQ0MDIxYmQwNjcxNDkxY2RjNDNiMWExNjFkZA==", Nonce="d36e3162829ed4c89851497a717f", Created="2014-03-20T12:51:45Z"

但我不知道在哪里可以找到,来自我的 httr 代码的请求看起来如何以及我做的不同。 编辑: "digest::sha1(pwd, algo="sha1", serialize=FALSE)" 必须是 digest(pwd, algo="sha1", serialize=FALSE)。然后就可以了。

【问题讨论】:

  • 你测试过你的代码吗?如果是,您收到了哪些错误?

标签: r api httr wsse


【解决方案1】:

这是一种评论,但为了清晰起见,我无法按照需要的方式进行格式化,所以在这里。如果被感动,那么学究们可以随意投反对票:

首先,在GET() 调用中添加一个verbose() 参数,以查看您传递的内容是否符合您的想法。我打赌问题是您分配的'X-WSSEP:' 值中的:。我还发现在 add_headers() 调用中使用命名参数要容易得多,所以不妨试试:

GET(
  url = URL,
  add_headers(`X-WSSE` = header),
  verbose()
)

看看这是否能解决这个问题,或者至少能让你走得更远。

另外:一旦您的问题得到解决并获得所需的访问权限,请考虑为 Emarsys API 创建一个 pkg。如果您之前没有制作过软件包,那么这将是一种 ++gd 的学习体验,无论哪种方式,它都可能对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2022-09-23
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多