我怎样才能通过REST API调用没有IIS / WCF的Windows用户身份validation?

在为我公司开发内部部署的仅限Intranet的REST API服务器的同时,我也对自己的身份validation问题进行了完全的混淆。

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

没有

  • 任何forms的访问我们的活动目录和/或域控制器,除了通常在Windows下运行的任何应用程序
  • 任何方式来影响广告设置或configuration
  • Active Directory联合身份validation服务(Active Directory Federation Services,ADFS)(我认为 ,我们使用Windows 7和Office 2010,只是为了对软件景观的状态有所了解)
  • Azure Active Directory(AAD)

想要

  • 服务器validation请求是由我们公司的用户进行的一种方式
    • 如果客户端必须为每个请求发送一些额外的authentication数据,只要它不包含任何forms的用户密码

我不想:

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

我已经阅读了文章,展示了如何使用IIS的Windows身份validation ,或者如何使用Nancy使用Azure Active Directory(AAD) 。 这里的其他问题已经告诉我如何validationActive Directory的用户名/密码组合 。 然而,这些都不能满足我所有的要求,或者有自己的要求(比如AAD / ADFS),我不能满足。

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

也许我很天真,但是我想要解决的办法是沿着以下几条线:

  1. 客户端使用当前login的用户的凭证查询某种forms的身份validation令牌的服务(AD,域控制器…)
  2. 然后将令牌连同用户名一起发送到服务器,作为需要authentication的请求的一部分
  3. 服务器提取令牌,并查询相同的服务(AD,域控制器,…)令牌是否可信,有效且属于有问题的用户

这可能吗? 理想情况下,我可以插入一些现成的图书馆(我正在接触,我知道)?

您可以使用无状态身份验证和Jwt来执行此操作。 发送一个用户名和密码到“/ auth”(例子),“/ auth”将搜索AD(example)并验证用户是否存在,然后创建一个带有用户名的Jwt令牌。 当你提出请求时,你只会发送一个Jwt令牌,而Nancy会验证令牌。