我托管了一个 Wcf 服务
当用户登录到他的用户帐户时,这是我对 wcf 服务的第一层安全性。那是正常的Windows登录身份验证。我想在访问 Wcf 服务之前提供第二层安全性。第二层安全性可以是用户名检查或用户名和密码检查。还有,在第二层安全中,如果用户与当前登录的用户相同,则不会要求认证。否则,要求将身份验证作为第二层安全性的一部分。
我应该如何实现这个逻辑?
我托管了一个 Wcf 服务
当用户登录到他的用户帐户时,这是我对 wcf 服务的第一层安全性。那是正常的Windows登录身份验证。我想在访问 Wcf 服务之前提供第二层安全性。第二层安全性可以是用户名检查或用户名和密码检查。还有,在第二层安全中,如果用户与当前登录的用户相同,则不会要求认证。否则,要求将身份验证作为第二层安全性的一部分。
我应该如何实现这个逻辑?
我想您是在询问有关使用自定义凭据进行身份验证的问题,您可以在此处阅读
答案取决于您是使用 WCF 服务(如 Web 服务器)(使用 REST、BasicHttpBinding、WSHttpBinding 或 WebHttpbinding),还是使用更类似于网络的协议(如 NetNamedPipeBinding)。使用类似网络的协议,您可以建立在用户登录后持续存在的实时会话。
但是,假设您使用的是以 Web 为中心的协议之一,您无法真正设置第一、第二、第 n 层安全性。您可以发送一个自定义凭据侦听器(如 Paramosh 指向的内容),在用户使用服务之前捕获他/她,但仅此而已。可以说,在身份验证事件和请求击中风扇之间没有进一步的事件。
所以这就是我的建议:因为 http 通信几乎总是一组重复的请求和响应,所以您的身份验证发生在第一次联系时,给用户(在他们提交凭据之后)他们的 SessionID (GUID) 令牌可以随心所欲地返回。SessionID 令牌需要存储在某处的数据库中,并且在每次后续访问时,用户都需要出示该令牌以进行验证,但之后您就可以有效地获得一个实时会话场景,该场景应该可以防止不必要的入侵。并且可以通过上面列出的自定义凭据功能检查此 SessionID(或您使用的任何内容)。