【问题标题】:How can I authenticate a windows user over a REST API call without IIS/WCF?如何在没有 IIS/WCF 的情况下通过 REST API 调用对 Windows 用户进行身份验证?
【发布时间】:2016-11-04 11:30:46
【问题描述】:

在为我的公司开发本地、仅限 Intranet 的 REST API 服务器时,我设法完全混淆了身份验证问题。

  • 用 C# 实现的 REST Web 服务器,使用自托管 Nancy,作为 Windows 服务运行
  • 一个可以查询服务器的C#客户端,由我们公司的用户运行

我确实没有有:

  • 对我们的 Active Directory 和/或域控制器的任何形式的访问,除了在 Windows 下运行的任何应用程序通常具有的访问权限
  • 以任何方式影响 AD 设置或配置
  • Active Directory 联合服务 (ADFS)(我认为。我们使用 Windows 7 和 Office 2010,只是为了对软件环境的状态提供一些看法)
  • Azure 活动目录 (AAD)

想要

  • 服务器验证请求是由我们公司的用户发出的一种方式
    • 如果客户端必须在每个请求中发送一些额外的身份验证数据,这是完全可以的,只要它包含任何形式的用户密码

我确实想要:

  • 必须设置任何额外的软件(我的服务器必须是最低配置和维护,以便普通用户可以安装和运行它)
  • 安装/配置/维护 IIS 服务器(见上文)
  • 使用 ASP.net(对我的需要来说太大了,请参阅以上几点)
  • 以任何方式处理用户密码(公司政策和常识)
  • 冒充用户(我只需要验证请求的真实性)
  • 实现我自己的用户帐户数据库。我们已经有六个服务需要自己的用户名/密码组合,我不想再添加一个

我已经阅读了有关如何使用use Windows authentication with IIS 或如何使用Azure Active Directory (AAD) with Nancy 的文章。这里的其他问题已经告诉我如何authenticate username / password combinations against the Active Directory。但是,这些都不能满足我的所有要求,或者有自己无法满足的要求(如 AAD/ADFS)。

似乎Kerberos/SSPI 可能是我想要的,但使用 C# 似乎非常复杂且非常复杂。我可能不得不走这条路,但我真的可以从一些最小的工作示例中受益(接受的答案提供了一个 C# 实现/包装器,包括一个示例项目,但我似乎无法做出头脑或它的尾巴)。

也许我很天真,但我想象的解决方案大致如下:

  1. 客户端使用当前登录用户的凭据查询服务(AD、域控制器、...?)以获取某种形式的身份验证令牌
  2. 令牌随后与用户名一起发送到服务器,作为需要验证的请求的一部分
  3. 服务器提取令牌,并查询同一服务(AD、域控制器等)令牌是否真实、有效并属于相关用户

这可能吗?理想情况下,我可以将某种现成的库插入到我的项目中(我知道)?

【问题讨论】:

    标签: c# windows authentication active-directory nancy


    【解决方案1】:

    您可以使用无状态身份验证和 Jwt 来做到这一点。向“/auth”(示例)发送用户名和密码,“/auth”将搜索 AD(示例)并验证用户是否存在,然后使用加载的用户名创建 Jwt 令牌。当您发出请求时,您只会发送一个 Jwt 令牌,Nancy 会验证该令牌。

    【讨论】:

    • 我希望这个实现能有所帮助。 github.com/apedroed88/NancyJwtAutenticationv2
    • 这实际上是我最终做的,所以我会接受它。但是,我最初的问题的目的是找出是否有办法说服 AD 以某种方式为我做这件事,我想可以用“否”来回答 :)
    猜你喜欢
    • 2012-09-29
    • 1970-01-01
    • 2016-04-16
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 2022-06-10
    相关资源
    最近更新 更多