通过 REST API 传递“Windows 身份验证”?

Posted

技术标签:

【中文标题】通过 REST API 传递“Windows 身份验证”?【英文标题】:Passing 'Windows Authentication' through REST API? 【发布时间】:2018-11-15 18:50:43 【问题描述】:

我有权访问仅允许“Windows 身份验证”的 SQL Server 数据库系统 - 即使用您的 Windows 登录凭据访问数据。 (不使用用户名密码)。它还控制数据库权限。

我想为不熟悉 SQL 的用户构建一个 REST API,以便从该服务器获取数据。问题是,我需要使用用户的凭据来执行命令,而不是托管 REST API 的机器。我如何设计允许用户传递他们的登录名并让 API 使用该特定登录名向服务器发送查询的系统?

我找到了来自 Microsoft 的参考资料,不确定是否相关。

https://docs.microsoft.com/en-us/sql/relational-databases/security/choose-an-authentication-mode?view=sql-server-2017

【问题讨论】:

允许这样做的机制称为 Kerberos 委托。不,SQL Server 在这种情况下只是一个数据源,您不必对其配置进行任何更改(除了授予相应的 AD 用户权限之外)。 嗨@RogerWolf。谢谢你的建议。您能否给我一个简短的框架/指南,我该如何实现这一目标? 【参考方案1】:

您所追求的是 Kerberos 委托,有时也称为“双跳”。只要您坚持使用 Microsoft 堆栈,就不必在代码中显式实现它;而是配置问题。

此post 详细描述了该功能所需的设置。您还可以在this help article 中找到一些基本要求。除此之外的任何东西,只需谷歌它。

【讨论】:

我在 Windows 机器上使用 Python (django) + SQL Server。您认为这很容易还是需要一些仔细的配置?谢谢。 @MTANG,您可能需要在代码中做/添加一些额外的事情,但不确定哪些 - 我不是真正的网络开发人员。

以上是关于通过 REST API 传递“Windows 身份验证”?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Windows 身份验证凭据从客户端传递到 Web API 服务

通过 WCF 服务传递 NetworkCredential 以与 EWS API 一起使用

我应该通过 HTTP 标头或将正文作为 JSON 传递到 REST Api 吗?

如何从 REST API 传递类别属性值

如何在 JAVA 中将 JSON 和文件传递给 REST API?

C# REST PayPal API - 如何传递自定义变量?