WCF用户名没有证书
-
22-08-2019 - |
题
我工作上的一个项目,我需要如下。
- WCF服务在服务器上面(.净3.5)
- WPF客户的客户端(.净3.0)
我有一个现有的应用程序,我必须要使用的认证和授权(在服务器上侧)。我也需要储存一些元数据有关用户在WCF服务线的主要(a站点对象)。我这样做,以便我能得到它在WCF服务如果我绝对必须的;一些业务逻辑可能需要它。所以我计划做以下...
创建一个自定义ServiceAuthorizationManager为服务器,并在那里,我将登录用户和获得角色从现有的应用程序。我将缓存"的网站"的对象,并呼吁进一步reqests拉从高速缓存。我还需要一个CustomPrincipal对象保持我的自定义的数据。我想模拟用户,所以,我可以使用的系统角色过滤在WCF这样的:
[PrincipalPermission(SecurityAction.Demand, Role = "Role1")]
public string[] RolesForUser(string username){}
我试图使用ASP.NET 授权与一个自定义中的角色提供者,但我不能设定上的任何东西当前的主体。我还试图使用一个自定义IAuthorizationPolicy,但问题出现了。这些问题的处理能够使用WCFClient.exe 应用程序,当它被发现(用墨西哥endpoing)它不会给任何凭据,所以登录将会失败。我最终决定,ServiceAuthorizationManager是正确的路要走,但是我打开的其他建议。
在我的客户会收集的全权证书,并把它们纳入周转基金的代理类,如下所示。
proxy.ChannelFactory.Credentials.UserName.UserName = userName;
proxy.ChannelFactory.Credentials.UserName.Password = password;
因为我开始往下走这条路,我注意到,我是不是能够获得用户名/密码在CheckAccessCore的方法我的经理人类。进一步的调查表明,我确实应该进行身份验证,在一个自定义UserNamePasswordValidator.所以我创造了其中的一个。问题是,验证方法从来没有呼吁。
进一步的调查显示,为了使验证方法,以被称为我WCF服务具有消息或运输级的安全。问题是,我找不出如何有消息或传输的水平安全没有 X.509 证书。这种产品进入几百令人难以置信的锁定机器,并安装证书是不可能的。
有没有办法做到的我在问什么没有安装证书吗?
解决方案
短的回答;你不能。只要你使用用户名和密码,你需要某种形式的安全通道。
但是你不需要证明在客户;只有在服务器上。
其他提示
实际上它是可能的,但你会需要实现自己的结合。
亚龙Naveh开发WCF结合,使明确的文字用户名/密码在HTTP。他的 文章 包括代码的结合。
我不知道的详细信息的网络基础设施,但是如果你是在一个窗户域,应该考虑使用Windows全权证书。
它是能够使用信息安全就没有证明如果您使用的Windows的凭据。这是默认的行为wsHttpBinding(出的框)。
使用现成的解决方案(没有执行自己的结合)WCF鼓励(要求)使用安全通道时认证的凭证都包括在信息。
使用定制的结合,可以指定全权证书明确的文本肯定是一个解决方案,但我会认为前两次使用它。