【发布时间】: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# 实现/包装器,包括一个示例项目,但我似乎无法做出头脑或它的尾巴)。
也许我很天真,但我想象的解决方案大致如下:
- 客户端使用当前登录用户的凭据查询服务(AD、域控制器、...?)以获取某种形式的身份验证令牌
- 令牌随后与用户名一起发送到服务器,作为需要验证的请求的一部分
- 服务器提取令牌,并查询同一服务(AD、域控制器等)令牌是否真实、有效并属于相关用户
这可能吗?理想情况下,我可以将某种现成的库插入到我的项目中(我知道)?
【问题讨论】:
标签: c# windows authentication active-directory nancy