web-services - 使用基于 HTTP 基本身份验证的 Windows 用户对 NAV Web 服务进行身份验证
问题描述
我有一个 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 是一个选项吗?
解决方案
我自己没试过,但正如这里所说
Microsoft Dynamics NAV Server 实例的所有用户必须使用相同的凭据类型。您可以在 Microsoft Dynamics NAV Server 管理工具中指定用于特定 Microsoft Dynamics NAV Server 实例的凭据类型。
因此,如果为 ntlm 配置了实例,则无法使用 NavPassword 对用户进行身份验证。但是您始终可以为另一种凭据类型安装和配置单独的实例(= 服务层)。
您还可以完全限制常规 RTC 用户连接该实例并使其专用于 Web 服务。
更新
正如我已经提到的,服务层与导航实例相同。可以从Microsoft Docs了解如何创建新的导航实例。实例之间的区别在于访问它们的 URL。不同的实例可以位于不同的服务器上,也可以位于同一个服务器上。
就 MS Windows Nav 而言,Nav 实例是一项服务。
推荐阅读
- php - 在闭包函数参数 PHP 中添加类 - 抛出未捕获的 TypeError
- windows - 星际公民发射器冲突
- python - 按列顺序将特定列转换为行,并在 Python 中保持其余列相同
- vaadin - 为自动宽度网格列禁用 Vaadin Flow MenuBar 中的项目溢出
- python - 从 numpy.genfromtxt 导入文件时打印求和数组
- python - 如何使用 python 访问 Watson Assistant?
- bazel - 是否有 Bazel 命令行来确定一个或多个给定标签的输出的绝对路径?
- javascript - 比较 Post 数组和 Json 数组
- reactjs - 通过按 TAB KEY 聚焦时如何删除/禁用按钮波纹
- c# - 如何根据匹配的字段在 MongoDB 中搜索特定字段