如何在没有 IIS/WCF 的情况下通过 REST API 调用验证 windows 用户?
How can I authenticate a windows user over a REST API call without IIS/WCF?
在为我的公司开发内部部署的仅限内联网的 REST API 服务器时,我在身份验证问题上完全搞糊涂了。
我有:
- 一个用 C# 实现的 REST Web 服务器,使用自托管 Nancy,运行宁作为 Windows 服务
- 一个可以查询服务器的C#客户端,运行我公司某用户
我没有有:
- 对我们的 Active Directory and/or 域控制器的任何形式的访问,除了 Windows 下的任何应用程序 运行ning 通常具有的
- 影响 AD 设置或配置的任何方式
- Active Directory Federation Services (ADFS)(我 认为 。我们使用 Windows 7 和 Office 2010,只是为了对软件环境的状态提供一些看法)
- Azure 活动目录 (AAD)
我想要:
- 服务器验证请求为本公司用户的一种方式
- 如果客户端必须在每个请求中发送一些额外的身份验证数据,那完全没问题,只要它不包含任何形式的用户密码
我不想要:
- 还要设置什么额外的软件(我的服务器必须是最低配置和维护,所以一般用户都可以安装和运行它)
- 安装/配置/维护 IIS 服务器(见上文)
- 使用 ASP.net(对我的需求来说太大了,请参阅以上要点)
- 以任何方式处理用户密码(公司政策和常识)
- 冒充用户(我只需要验证请求的真实性)
- 实施我自己的用户帐户数据库。我们已经有六个服务需要它们自己的 username/password 组合,我不想再添加一个
我已阅读介绍如何 use Windows authentication with IIS, or how to use Azure Active Directory (AAD) with Nancy. Other questions here have already informed me how to authenticate username / password combinations against the Active Directory 的文章。但是,其中none满足了我的所有要求,或者有自己的要求(如AAD/ADFS)我无法满足。
似乎 Kerberos/SSPI 可能是我想要的,但使用 C# 似乎非常复杂且非常复杂。我可能不得不走这条路,但我真的可以从一些最小的工作示例中受益(接受的答案提供了一个 C# implementation/wrapper,包括一个示例项目,但我似乎无法它的正面或反面)。
也许我很天真,但我认为解决方案是以下几行:
- 客户端使用当前登录用户的凭据查询服务(AD、域控制器...?)以获取某种形式的身份验证令牌
- 然后将令牌与用户名一起发送到服务器,作为需要进行身份验证的请求的一部分
- 服务器提取令牌,并查询同一服务(AD、域控制器...)令牌是否真实、有效且属于相关用户
这可能吗?理想情况下,我可以使用某种现成的库插入我的项目(我知道,我正在达到)?
您可以使用无状态身份验证和 Jwt 来做到这一点。将用户名和密码发送到“/auth”(示例),“/auth”将搜索 AD(示例)并验证用户是否存在,然后在加载时使用用户名创建 Jwt 令牌。当您发出请求时,您只会发送一个 Jwt 令牌,Nancy 会验证该令牌。
在为我的公司开发内部部署的仅限内联网的 REST API 服务器时,我在身份验证问题上完全搞糊涂了。
我有:
- 一个用 C# 实现的 REST Web 服务器,使用自托管 Nancy,运行宁作为 Windows 服务
- 一个可以查询服务器的C#客户端,运行我公司某用户
我没有有:
- 对我们的 Active Directory and/or 域控制器的任何形式的访问,除了 Windows 下的任何应用程序 运行ning 通常具有的
- 影响 AD 设置或配置的任何方式
- Active Directory Federation Services (ADFS)(我 认为 。我们使用 Windows 7 和 Office 2010,只是为了对软件环境的状态提供一些看法)
- Azure 活动目录 (AAD)
我想要:
- 服务器验证请求为本公司用户的一种方式
- 如果客户端必须在每个请求中发送一些额外的身份验证数据,那完全没问题,只要它不包含任何形式的用户密码
我不想要:
- 还要设置什么额外的软件(我的服务器必须是最低配置和维护,所以一般用户都可以安装和运行它)
- 安装/配置/维护 IIS 服务器(见上文)
- 使用 ASP.net(对我的需求来说太大了,请参阅以上要点)
- 以任何方式处理用户密码(公司政策和常识)
- 冒充用户(我只需要验证请求的真实性)
- 实施我自己的用户帐户数据库。我们已经有六个服务需要它们自己的 username/password 组合,我不想再添加一个
我已阅读介绍如何 use Windows authentication with IIS, or how to use Azure Active Directory (AAD) with Nancy. Other questions here have already informed me how to authenticate username / password combinations against the Active Directory 的文章。但是,其中none满足了我的所有要求,或者有自己的要求(如AAD/ADFS)我无法满足。
似乎 Kerberos/SSPI 可能是我想要的,但使用 C# 似乎非常复杂且非常复杂。我可能不得不走这条路,但我真的可以从一些最小的工作示例中受益(接受的答案提供了一个 C# implementation/wrapper,包括一个示例项目,但我似乎无法它的正面或反面)。
也许我很天真,但我认为解决方案是以下几行:
- 客户端使用当前登录用户的凭据查询服务(AD、域控制器...?)以获取某种形式的身份验证令牌
- 然后将令牌与用户名一起发送到服务器,作为需要进行身份验证的请求的一部分
- 服务器提取令牌,并查询同一服务(AD、域控制器...)令牌是否真实、有效且属于相关用户
这可能吗?理想情况下,我可以使用某种现成的库插入我的项目(我知道,我正在达到)?
您可以使用无状态身份验证和 Jwt 来做到这一点。将用户名和密码发送到“/auth”(示例),“/auth”将搜索 AD(示例)并验证用户是否存在,然后在加载时使用用户名创建 Jwt 令牌。当您发出请求时,您只会发送一个 Jwt 令牌,Nancy 会验证该令牌。