我正在努力从控制台应用程序访问Dynamics 2016 CRM OData Web API 。
我们安装了Dynamics CRM 2016,配置了基于声明的身份验证,并使用 AD FS v3.0。
我的理解是,控制台应用程序(或 Web 应用程序)应该能够使用 Windows 集成身份验证(即 NTML 或 Kerberos)访问 Web API,而无需任何特殊处理……或者 OAuth 流程在启用时应该可以工作。
对于访问动态“页面”的普通用户,身份验证工作正常(重定向到 AD FS 登录页面),但访问 OData API 似乎不起作用(例如:https ://crm.domain.org/api/发现/v8.0/):
- 在浏览器中,我收到 Windows 登录提示并输入有效凭据总是会导致 HTTP 401 未经授权的错误
- 在浏览器中,如果我在登录页面后导航到 Web API url ,那么我可以访问 Web API(即必须设置一些 cookie,并且我已经被隐式授权)
- 从代码中,使用具有特定有效凭据(或当前凭据)的 HttpClient,我也得到了 401
我尝试过的事情:
- 如果我完全禁用基于声明的身份验证,HttpClient 工作正常,我可以访问 OData API
如果我启用基于声明的身份验证,并通过 PowerShell激活 OAuth
Add-PSSnapin Microsoft.Crm.PowerShell ; $ClaimsSettings = Get-CrmSetting -SettingType OAuthClaimsSettings; $ClaimsSettings.Enabled = $true ; Set-CrmSetting -Setting $ClaimsSettings ;
。Windows 集成身份验证仍然不起作用,但现在可以使用 Bearer 身份验证。我可以使用此代码段来检索 OAuth 端点以生成令牌,并
AuthenticationContext.AcquireTokenAsync
用于发出令牌,然后将其传递到Authorization
HTTP 标头中……但是,无论如何,我都会收到此错误: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/
我错过了什么吗?这可能是配置问题吗?