1

我有一个 NAV 实例,它公开 (OData) Web 服务并配置为Windows用作凭证类型。我能够使用NTLM成功地对这些 Web 服务进行身份验证。但是,我更喜欢使用 HTTP 基本身份验证来针对服务进行身份验证。我知道可以创建一个访问密钥进行身份验证。我知道如果我将基本身份验证用户名设置为 NAV 用户卡中的User Name和密码Web Service Access Key,我应该能够使用基本 HTTP 身份验证。NavUserPassword我已经在其他配置为使用凭据类型的 NAV 实例上成功完成了此操作。但是,这不适用于具有Windows凭证类型的实例。

更具体地说,如果我从NavUserPassword实例请求受保护的资源,我会收到一个WWW-Authenticate带有 value 标头的 401 Basic realm=""。如果我对Windows实例做同样的事情,我会得到一个WWW-Authenticate带有 value 的标题NTLM。这表明这不是提供错误密码的简单情况,而是 NAV 实例未配置为接受任何 Web 服务访问密钥的更复杂情况。

上的文档Web Services Authentication似乎暗示对于 Windows 凭据类型,Web 服务的 HTTP 基本身份验证是不可能的,但这不是很明确,我不确定我是否正确解析了文档。

顺便说一句,上述文档表明 OAuth 也可以用作身份验证机制,但链接文档位于 PartnerSource 门户墙后面。如果在我的情况下 HTTP 基本身份验证不是一个选项,那么 OAuth 是一个选项吗?

4

2 回答 2

3

我自己没试过,但正如这里所说

Microsoft Dynamics NAV Server 实例的所有用户必须使用相同的凭据类型。您可以在 Microsoft Dynamics NAV Server 管理工具中指定用于特定 Microsoft Dynamics NAV Server 实例的凭据类型。

因此,如果为 ntlm 配置了实例,则无法使用 NavPassword 对用户进行身份验证。但是您始终可以为另一种凭据类型安装和配置单独的实例(= 服务层)。

您还可以完全限制常规 RTC 用户连接该实例并使其专用于 Web 服务。

更新

正如我已经提到的,服务层与导航实例相同。可以从Microsoft Docs了解如何创建新的导航实例。实例之间的区别在于访问它们的 URL。不同的实例可以位于不同的服务器上,也可以位于同一个服务器上。

就 MS Windows Nav 而言,Nav 实例是一项服务。

于 2018-09-10T18:25:09.367 回答
1

有可能,步骤是

  1. 您需要使用 NavUserPassword Auth 的服务层(为此您需要证书)
  2. 在 NAV 中,您需要创建一个新用户并为其生成一个 Web 服务密钥
  3. 使用用户名和密钥,您可以使用基本身份验证

https://docs.microsoft.com/en-us/dynamics-nav/web-services-authentication

于 2018-09-10T15:38:37.847 回答