【问题标题】:Accessing sharepoint in R with windows authentication使用 Windows 身份验证访问 R 中的共享点
【发布时间】:2015-07-17 11:32:36
【问题描述】:

我正在尝试从我公司的 Intranet 共享点读取数据。

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

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

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

【问题讨论】:

  • 你看过httr包中的authenticate()函数吗?
  • 啊抱歉,我应该澄清一下,我试图避免以纯文本形式输入我的凭据(并且每次强制执行定期密码更改策略时都必须更新它)。

标签: r sharepoint windows-authentication


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回答。正如我所提到的,使用authenticate 确实对我有用。我试图找出是否有一种方法不需要输入“用户名”或“密码”,因为这会将凭据暴露给有权访问 R 脚本的任何人。
  • 哦,我明白了,我实际上将我的保存在文件目录的 txt 文件中。仍然是一个薄弱的解决方案,我不确定我们的 AD 是否有办法,但我在大型公司这样做了,所以并不总是那么容易获得这种类型的集成 :)
  • 使用 R secret 包将您的密码保存在加密文件中并从 R 访问它。或者使用在弹出窗口中请求密码的众多选项之一:stackoverflow.com/questions/14600099/…
【解决方案2】:

按照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"))

【讨论】:

    【解决方案3】:

    如果身份验证对您有用,并且您的主要目标是不让您的用户和密码硬编码并暴露在脚本中,请尝试使用包 getPass,它有一个名为 getPass(msg="message you want to display ") 会打开一个提示,让您输入一个字符串(对于任何观看您屏幕的人来说,该字符串都会被屏蔽),然后返回该字符串。

    免责声明:如果您这样做,则运行脚本的人必须具有安全访问权限并输入他们自己的凭据才能使脚本运行。此外,如果您在 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"))
    

    【讨论】:

      【解决方案4】:

      我能够使用 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)
      

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-11
          • 2011-11-23
          • 1970-01-01
          相关资源
          最近更新 更多