【问题标题】:How can I troubleshoot a 401 error from MS Dataverse through R?如何解决从 MS Dataverse 到 R 的 401 错误?
【发布时间】:2022-01-08 12:03:19
【问题描述】:

昨天我正在使用以下代码通过 R 从我的 MS Dataverse 中获取数据。它工作正常。

require(httr)
require(rvest)

dataverse_api = oauth_endpoint(request = NULL, 
   authorize = "https://login.microsoftonline.com/REDACTED/oauth2/v2.0/authorize",
   access = "https://login.microsoftonline.com/REDACTED/oauth2/v2.0/token",
   base_url = "https://login.microsoftonline.com/common/oauth2/authorize?resourcehttps://org593dc393.crm4.dynamics.com")

API.Key = "REDACTED"
API.Secret = "REDACTED"

App = oauth_app("EPS Project Development", key = API.Key, secret = API.Secret)

API.token = oauth2.0_token(dataverse_api, App, scope = "https://org593dc393.crm4.dynamics.com/.default")
API.AuthKey = API.token$credentials$access_token

GET.Buildings = GET("https://org593dc393.crm4.dynamics.com/api/data/v9.2/crfd0_dartbuildingses", add_headers(Authorization = paste("Bearer", API.AuthKey, sep = " ")))

今天,尝试不加修改地运行相同的代码行给我一个 401 错误。基于对调试 401 错误的一些研究(没有一个特定于 MS Dataverse),我尝试清除我的缓存、清除我的 cookie、用ipconfig/flushdns 刷新我的 DNS 并直接导航到端点并检查返回以下 200 的请求回复:

通过所有这些努力,尽管这段代码昨天有效,但我仍然在 R 中收到以下响应:

我还使用 Postman 生成了一个新令牌。当我使用该令牌运行 GET 命令时,我的状态为 200。

API.AuthKey = "REDACTED TOKEN FROM POSTMAN"
GET.Buildings = GET("https://org593dc393.crm4.dynamics.com/api/data/v9.2/crfd0_dartbuildingses", add_headers(Authorization = paste("Bearer", API.AuthKey, sep = " ")))

GET.Buildings$status_code
[1] 200

对于我最初尝试的 R 响应中的任何人来说,我做错了什么是显而易见的吗?如果没有,我该如何调试?

【问题讨论】:

    标签: r get microsoft-graph-api http-status-code-401 httr


    【解决方案1】:

    事实证明,代码每次都提供相同的访问令牌。我只需要添加 cache = FALSE 以便我不使用缓存的令牌。如果它对任何人都有帮助,完整的代码现在是:

    require(httr)
    require(rvest)
    
    dataverse_api = oauth_endpoint(request = NULL, 
       authorize = https://login.microsoftonline.com/REDACTED/oauth2/v2.0/authorize,
       access = https://login.microsoftonline.com/REDACTED/oauth2/v2.0/token,
       base_url = https://login.microsoftonline.com/common/oauth2/authorize?resourcehttps://org593dc393.crm4.dynamics.com)
    
    API.Key = "REDACTED"
    API.Secret = "REDACTED"
    
    App = oauth_app("EPS Project Development", key = API.Key, secret = API.Secret)
    
    API.token = oauth2.0_token(dataverse_api, App, scope = https://org593dc393.crm4.dynamics.com/user_impersonation, cache = FALSE)
    API.AuthKey = API.token$credentials$access_token
    
    GET.Buildings = GET(https://org593dc393.crm4.dynamics.com/api/data/v9.2/crfd0_dartbuildingses, add_headers(Authorization = paste("Bearer", API.AuthKey, sep = " ")))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-08
      • 2014-05-04
      • 1970-01-01
      • 2019-05-12
      • 2021-07-14
      • 2021-10-15
      • 2020-09-16
      • 2020-01-24
      相关资源
      最近更新 更多