2011-03-23 133 views
0

我已经实现了一个自定义ASP.net成员资格提供程序来处理表单身份验证。自定义提供程序使用自定义用户对象进行身份验证和授权。我想知道如果我可以将此对象传递给每个WCF调用而不将其添加到参数列表中?将自定义用户对象传递给WCF

回答

1

既然你已经在使用的MembershipProvider可以utalize上WCF以及因此两个由同一机构固定。

请在msdn上查看post

Windows通讯基础(WCF) 开发人员可以利用这些功能 出于安全目的。当 集成到WCF应用程序,用户 必须提供用户名/密码 组合WCF客户端应用程序 。将数据传输到 WCF服务,使用绑定 支持用户名/密码 凭证,如WsHttpBinding的 (在配置中,所述的wsHttpBinding 元),并设置所述客户端凭证 类型用户名。在服务,WCF 安全认证基于 上的用户名和密码,并 还分配由 ASP.NET角色指定的角色。

另一种选择是创建一个自定义IAuthorizationPolicy是通过

OperationContext.Current.IncomingMessageHeaders.GetHeader<T> 

拉了你的用户而不是设置您的主要如下所示:

evaluationContext.Properties[Constants.EvaluationContextPrincipal] = principal; 

下面是一些更多的信息创建自定义IAuthroizationPolicy。使用这种方法,您可以在不将用户传递给方法的情况下实现自己想要的功能。

只是被警告如果你走这条路,一个狡猾的人可能最终冒充用户,只需在你的头部提供一个假用户。

对于wcf使用asp.net成员资格提供程序很可能会让您真正了解您以后再加上一些安全性。

+0

感谢马克的回复。我已阅读MSDN文章,并在WCF应用程序中使用我的成员资格提供程序。我可以访问所有Membership类的方法,如Membership.CreateUser()。但是,我可以检索登录的用户。我是否需要任何特定语法来执行此操作? – 2011-03-25 12:45:38

+0

@Nima M,自从我使用这个以来,已经有一段时间了,我相信*在用户通过wcf服务进行身份验证之后,您应该可以通过ServiceSecurityContext获取当前用户。 – 2011-03-25 12:56:54

+0

我已经试过,它是空:( – 2011-03-25 14:08:47

0

您绝对不应该将此参数添加到每个方法的参数中。

我不知道您的自定义用户对象,但至于WS *和最安全的标准而言,用户对象将用户名和密码。

答案取决于您使用的绑定。 BasicHttpBindingBasicHttpContextBinding可以使用HTTP身份验证方案,而WsHttpBinding可以使用自定义消息安全性,您可以提供用户名和密码。

BasicHttpContextBinding是特别好,因为它可以与ASP NET会议的工作。

相关问题