使用Windows身份验证访问R中的sharepoint

时间:2015-05-07 04:17:42

标签: r sharepoint windows-authentication

我正在尝试从我公司的Intranet sharepoint读取数据。

require(httr)
url <- "http://<domain>/<path>/_vti_bin/ListData.svc/<something>"
r <- GET(url)

问题是,对Sharepoint的访问使用Windows身份验证。以上,预计会给我401 Unauthorized错误。

如何将我的Windows身份验证合并到R中的请求中,而无需在GET参数中以明文形式输入我的凭据? (使用authenticate()使用我的凭据工作)。

5 个答案:

答案 0 :(得分:1)

authenticate()是正确使用的功能,但您需要更改输入,如下所示:

require(httr)
url <- "http://<domain>/<path>/_vti_bin/ListData.svc/<something>"
r <- GET(url, authenticate("username","password",type="any"))

我不确定哪种特定类型有效,但我能够使用any建立会话。我在httr包文档中找到了解决方案。

https://cran.r-project.org/web/packages/httr/httr.pdf

答案 1 :(得分:0)

如果身份验证对您有用,并且此处的主要目标是不对用户和密码进行硬编码并在脚本中公开,请尝试使用getPass软件包,该软件包具有一个名为getPass(msg =“ message的消息,您想显示“)打开一个提示,提示您输入一个字符串(任何观看您的屏幕的人都看不到),然后返回该字符串。

免责声明:如果采用这种方式,则运行脚本的任何人都必须具有安全性访问权限,并输入自己的凭据才能使脚本正常工作。另外,如果您在RStudio之类的环境中将您的环境显示在侧面板中,则值将暴露给任何看着您的肩膀的人:

require(httr)
require(getPass)

user <- getPass(msg="Enter User ID: ")
pw <- getPass(msg="Enter password: ")

url <- "http://<domain>/<path>/_vti_bin/ListData.svc/<something>"
r <- GET(url, authenticate(user,pw,type="any"))

答案 2 :(得分:0)

我能够使用RCurlXML软件包中的功能组合对会话进行身份验证并将SharePoint列表转换为数据框。这是唯一对我有效的方法。

library(RCurl)
library(XML)
URL = "http://<domain>/<path>/_vti_bin/ListData.svc/<something>"
rawData = getURL(URL,userpwd=:"username:password")
xmlData = xmlParse(rawData)
items = getNodeSet(xmlData,"//m:properties")
df = xmlToDataFrame(items,stringsAsFactors=F)

答案 3 :(得分:0)

如果在使用Windows身份验证的公司网络上,则无需输入用户名和密码即可进行以下操作:

library(httr)

url <- "http://<domain>/<path>/_vti_bin/ListData.svc/<something>"
r <- GET(url, authenticate(":", ":", "ntlm"))

答案 4 :(得分:0)

获取here所述的站点ID。 获取here概述的列表ID。 如果您需要展开任何列表项,请签出this

为确保您不会像我一样秃顶,请确保将SharePoint网站中的读取访问权限项级别设置为“读取所有项”(here's参考)。

library(AzureGraph)

gr <- create_graph_login()
me <- gr$get_user("me")
url <- "https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items"
r <- call_graph_url(me$token, url, http_verb = c("GET"))