gpt4 book ai didi

oauth - 访问 Dynamics CRM 2016 Web API 时出现 401

转载 作者:行者123 更新时间:2023-12-03 10:43:29 33 4
gpt4 key购买 nike

我正在努力访问 Dynamics 2016 CRM OData Web API 从控制台应用程序。

我们有 动态 CRM 2016 已安装、配置了基于声明的身份验证并使用 AD FS v3.0。

我的理解是,控制台应用程序(或 Web 应用程序)应该能够使用 Windows 集成身份验证(即 NTML 或 Kerberos)访问 Web API,而无需任何特殊处理……或者 OAuth 流程在启用时应该可以工作。

对于访问 Dynamics“页面”的普通用户,身份验证工作正常(重定向到 AD FS 登录页面),但访问 OData API 似乎不起作用(例如:https://crm.domain.org/api/discovery/v8.0/):

  • 在浏览器中,我收到 Windows 登录提示,输入有效凭据总是导致 HTTP 401 未授权错误
  • 在浏览器中,如果我导航到 Web API url 登录页面后,我可以访问 Web API(即必须设置一些 cookie 并且我已经获得隐式授权)
  • 从代码中,使用具有特定有效凭据(或当前凭据)的 HttpClient,我也得到 401

  • 我尝试过的事情:
  • 如果我 完全禁用基于声明的身份验证 , HttpClient 工作正常,我可以访问 OData API
  • 如果我启用基于声明的身份验证,并且 激活 OAuth 通过 PowerShell Add-PSSnapin Microsoft.Crm.PowerShell ; $ClaimsSettings = Get-CrmSetting -SettingType OAuthClaimsSettings; $ClaimsSettings.Enabled = $true ; Set-CrmSetting -Setting $ClaimsSettings ; .

    Windows 集成身份验证仍然不起作用,但现在可以使用承载身份验证。我可以用 this snippet检索 OAuth 端点以生成 token ,并使用 AuthenticationContext.AcquireTokenAsync 发出 token ,然后将其传递到 Authorization HTTP Header ...但是,无论如何,我都会收到此错误:
    Bearer error=invalid_token, error_description
    =Error during token validation!, authorization_uri=https://our.adfs.domain.org/adfs/oauth2/authorize, resource_id=https://crm.domain.org/

  • 我错过了什么吗?这可能是配置问题吗?

    最佳答案

    来自 this answer从动态社区论坛来看,api 似乎对它所需的参数和 header 非常严格。执行请求时,请确保您拥有 Cache-Control: no-cacheContent-Type: application/x-www-form-urlencoded header 设置。

    在使用检索到的 token 访问 api 的后续请求中,您应该设置 Authorization标题形式为 Bearer: TOKEN (值得注意,因为很多人实际上认为他们可以直接放置 token ),OData-Version: 4.0 , Cache-Control: no-cacheAccept: application/json也是。

    查看不同的 OAuth endpoints和之前链接的答案,我不确定授权 uri 是否正确(例如 https://login.windows.net ),所以你要确保它是正确的。它还指出您应该使用 OAuth 端点 url 并使用 WWW-Authenticate返回有效的 header ,即使此路由将以 401 响应。我确定您已经看到 this example ,但它提供了一个非常完整的身份验证流程概述以及如何使用 AcquireTokenAsync 检索 token 。您传递资源和 clientID 的地方。我也可能正在查看更新的页面,它与您的情况无关。

    您还想检查您指定的资源ID 是否正确,有人报告必须以https://crm3.domain.org/ 的形式指定一个。或 https://crm4.domain.org/而不是裸机,所以这可能是一回事。

    考虑到@l 所说的 IP 可以代替域名工作,这也可能是配置问题。这很可能是证书问题,未正确验证或不受信任,从而创建您看到的错误,即使它不是适当的消息。还要确保您的 443端口允许通过您的防火墙。

    一个有趣的post作者在那里解释说Form Authentication他需要设置 AD FS 管理控制台才能继续(它是 CRM 2013,但可能仍然相关)。

    关于oauth - 访问 Dynamics CRM 2016 Web API 时出现 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37520115/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com