我工作上的一个项目,我需要如下。

  • 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鼓励(要求)使用安全通道时认证的凭证都包括在信息。

使用定制的结合,可以指定全权证书明确的文本肯定是一个解决方案,但我会认为前两次使用它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top