使用WCF的身份validation服务
我有一个自定义MembershipProvider,如下所示。 它根据Active Directoryvalidation用户名和密码。 我想把它作为“身份validation服务”。 即使客户端使用表单身份validation或Windows身份validation,这也应该有效。
有一个WCF“人力资源服务”,它提供员工信息。 “HR UI”网站正在使用“HR Service”WCF服务。 现在,我们需要确保在访问“HR服务”操作之前,使用“身份validation服务”对使用“HR服务”的任何客户端进行身份validation。 如果客户端应用程序经过一次身份validation,则下次不应再次validation(直到应用程序关闭)。 当打开客户端应用程序的新实例时,需要从头开始进行身份validation。
我们如何实现它? 我们是否有任何代码样本用于端到端流程演示?
注意:我应该能够使用自托管服务进行测试。
注意:客户端可以是任何平台(例如Java)。
namespace LijosCustomValidation { public sealed class LijoMembershipProvider : MembershipProvider { public override bool ValidateUser(string username, string password) { bool isValid = true; //my logic to validate the user name and password return isValid; } //other implementations of Abstract Methods from MembershipProvider }
如果身份validation成功,您的身份validation服务应返回令牌。 然后,该令牌应该被呈现给HR服务。
关于HR服务在这一点上做了什么,您有几个选择。 它可以知道validation令牌的秘密,也可以调用auth服务来validation令牌。
如果你知道秘密,那么令牌应该是一些可以validation的值,因此它可以是对称加密的用户ID。 理想情况下,它应该有一个时间组件来防止重放攻击。
我建议一些类似的东西
||
哈希值应该是第一个管道之后所有内容的哈希值(sha1,md5等)。 然后,您可以对结果进行base64编码并传递它。 然后validation令牌可以检查发布日期是否在某个时间范围内。
您还可以选择将令牌存储在客户端中的cookie中,并将cookie作为cookie传递给服务,或者将其作为服务的参数。 可能还有其他选项,具体取决于您的客户端体系结构以及您希望如何构建服务。
- 使用SortableBindingList – DataGridView不会自动对更改进行排序
- SerialPort.Open()抛出IOException – 没有足够的系统资源来完成所请求的服务
- 如何在提供WPF Dispatcher事件时等待WaitHandle?
- 处理表单之间的Control.Checked状态的最佳方法
- c#WinForms可以获得NumericUpDown文本区域
- 我可以在方法调用中强制自己进行短路吗?
- 如何通过分配新的Collection来更新Many-Many中的Collection?
- 枚举为标志使用,设置和移位
- Entity Framework 5.0 PostgreSQL(Npgsql)默认连接工厂