在Shiny服务器上使用“httr”中的OAuth向LinkedIn发送请求

3

我正在尝试使用'Shiny'服务器上的'httr'库从LinkedIn API中使用OAuth进行连接。 我已经用Shiny客户端UI和服务器端包装了本地工作的来自GitHub/hadley/httr的OAuth示例。 我可以让客户端UI正常工作。

library(shiny)

shinyUI(pageWithSidebar( 
  sidebarPanel (
  textInput("userEmail", "Your email address:", value =""),
  submitButton("Grant Permission")
  ),
  mainPanel()
))

但是,服务器端不会为身份验证打开浏览器。
library(shiny)
library(httr)

shinyServer(function(input, output) {

  output$GrantPermission <- reactive ({

    linkedin <- oauth_endpoint("requestToken", "authorize", "accessToken", base_url = "https://api.linkedin.com/uas/oauth/")

    myapp <- oauth_app("linkedin", key = "abc", secret = "def")

    token <- oauth1.0_token(linkedin, myapp)

    sig <- sign_oauth1.0(myapp, token$oauth_token, token$oauth_token_secret)

    save.image(paste(input$userEmail, ".RData"))
  })
})

会话信息: R版本:2.15.3 平台:x86_64-pc-linux-gnu 软件包:httr_0.2;shiny_0.8.0.99。

任何关于可能问题的线索?


你可以尝试在开发版本中使用use_oob,但我认为httr的OAuth支持还不太适合这种用例。 - hadley
感谢您提议尝试开发版本的解决方案并为您的出色贡献,亲爱的Hadley!我已经使用了install_github(“httr”),它附带了httr_0.2.99。从httr的文档中可以看出,use_oob = TRUE仅适用于OAuth 2.0。然而,我无法成功地在LinkedIn上使用OAuth 2.0。 - Hjyah
我们正在进步和向前发展!在oauth2.0_token中使用use_oob = TRUE参数提供了一个URL并提示输入授权代码。然而,当我尝试在Firefox v25中打开该URL时,我收到了一个内容编码错误。请将您的浏览器指向以下URL:https://api.linkedin.com/uas/oauth//authorize?client_id=123&scope=&redirect_uri=urn%3Aa%3Ab%3Aoauth%3A2.0%3Aoob&response_type=code输入授权代码:内容编码错误 由于使用了无效或不支持的压缩形式,因此无法显示您要查看的页面。 - Hjyah
1个回答

4

我认为我遇到了与oAuth和twitteR类似的问题。事实证明这是一个SSL问题,通过添加以下内容解决了:

require(RCurl) 
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))

感谢您分享您的解决方案,Troy!虽然代码在本地没有证书时可以正常工作,但我在Shiny服务器上尝试了您的解决方案,并通过从RStudio控制台运行它取得了一些进展。它确实打开了一个用于身份验证的浏览器窗口——再次感谢!但是,在授予权限后,它尝试返回服务器到http://localhost:8787/custom/OAuth/cred?oauth_token=abc&oauth_verifier=def。有什么想法吗? - Hjyah
我想给你的答案点赞,但需要15点声望值——而我只有1点。 - Hjyah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接