首页 > 解决方案 > 尝试使用 R 对 MS Dynamics CRM 2016 WebApi 进行身份验证

问题描述

我可以使用一些帮助..

我正在尝试连接到 MS Dynamics CRM (2016) 本地数据库。它面向互联网 (IFD) 并使用 adfs 3.0 对用户进行身份验证。

现在,当我尝试使用网络浏览器连接到 api 时,会出现一个小登录表单,让我输入用户名和密码。当我提交这些凭据时,浏览器会打开一个带有漂亮 json 代码的页面,但是,当我在 R 中尝试以下代码时

library(httr)

result <- GET(
   "https://xrm.company.nl/Company/api/data/v8.2/some=query",
   config = authenticate(
      user = "MyUsername",
      password = "MyPassword",
      type = "ntlm"
   )
)

我得到了构建 POST 表单的 text/html 内容。这个表格已经为我填写好了,但是它依赖于一些 js 脚本来自动提交。html 中还有一条警告消息,说明脚本已禁用,并带有一个方便(但无法访问)的提交按钮。

当我从内容中提取 html content(result, as = "text"),将其放入 html 文件并在我的浏览器中打开它时,json 结果就会出现。

但我不知道如何启用脚本,或者如何使用 R 单击提交。

有人对这些问题的解决方法有任何想法,或者关于如何使用 R 正确地向 adfs 进行身份验证?

标签: rauthenticationdynamics-crmadfshttr

解决方案


您将请求 SAML 不记名访问令牌。请参阅 Magnatism 博客上的这篇文章:Dynamics 365 Online ADFS 使用用户凭据进行身份验证

简而言之,您需要执行以下操作...

  1. 通过向用户领域端点发送 HTTP GET 请求来获取用户领域
  2. 通过向 ADFS 服务端点发送 HTTP POST 请求获取 SAML 访问令牌
  3. 提取元素之间的 XML 内容,删除任何缩进,然后编码为 Base 64 字符串
  4. 通过向 Token Endpoint 发送 HTTP POST 请求获取 SAML Bearer Access Token
  5. 设置 HTTP 请求的 Authorization Header

推荐阅读