r - 尝试使用 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 进行身份验证?
解决方案
您将请求 SAML 不记名访问令牌。请参阅 Magnatism 博客上的这篇文章:Dynamics 365 Online ADFS 使用用户凭据进行身份验证
简而言之,您需要执行以下操作...
- 通过向用户领域端点发送 HTTP GET 请求来获取用户领域
- 通过向 ADFS 服务端点发送 HTTP POST 请求获取 SAML 访问令牌
- 提取元素之间的 XML 内容,删除任何缩进,然后编码为 Base 64 字符串
- 通过向 Token Endpoint 发送 HTTP POST 请求获取 SAML Bearer Access Token
- 设置 HTTP 请求的 Authorization Header
推荐阅读
- graphql - 对字段使用标题大小写
- sql - 这是避免 SQL 注入的好方法吗?
- ansible - Ansible 设置附加引号和中断执行
- sql - 使用 sql 查询对 clickhouse 中的表进行非规范化
- typescript - 打字稿 - 函数不能返回未定义
- android - 在 Android 项目崩溃中的 ViewPager 中添加 Flutter View/Fragment
- c# - 字面量长值
- laravel - 使用 Laravel 应用程序的推送器沿着队列作业使用 QUEUE_DRIVER 设置为 env 文件中的数据库而不是同步
- sympy - sympy 序列:如何使用产品?
- mysql - Pentaho“无法从结果集中获取行”错误