我已经实现了一个自定义ASP.net成员资格提供程序来处理表单身份验证。自定义提供程序使用自定义User对象进行身份验证和授权。我想知道如果我可以将此对象传递给每个WCF调用而不将其添加到参数列表中?
答案 0 :(得分:1)
由于您已经在使用MembershipProvider,因此您可以在wcf上使用它,因此两者都由相同的机制保护。
在msdn。
上查看此postWindows Communication Foundation(WCF) 开发人员可以利用这些优势 出于安全目的的功能。什么时候 集成到WCF应用程序中, 用户必须提供用户名/密码 组合到WCF客户端 应用。要将数据传输到 WCF服务,使用绑定 支持用户名/密码 凭证,例如WSHttpBinding (在配置中,wsHttpBinding 元素)并设置客户端凭据 键入UserName。在服务上,WCF 安全性基于用户进行身份验证 关于用户名和密码,和 还指定了由...指定的角色 ASP.NET角色。
另一种选择是创建一个自定义IAuthorizationPolicy
,通过
OperationContext.Current.IncomingMessageHeaders.GetHeader<T>
而不是如下设置你的校长:
evaluationContext.Properties[Constants.EvaluationContextPrincipal] = principal;
以下是有关创建自定义IAuthroizationPolicy的更多信息。使用此方法,您可以实现所需,而无需将用户传递给方法。
只是被警告如果你走这条路线,一个狡猾的人最终会通过简单地在你的标题中提供虚假用户来冒充用户。
使用wcf的asp.net成员资格提供程序很可能会让你得到你真正想要的东西,再添加一些安全性。
答案 1 :(得分:0)
你绝对不应该将它添加到每个方法的参数中。
我不知道您的自定义用户对象,但就WS *和大多数安全标准而言,您的用户对象将具有用户名和密码。
答案取决于您使用的绑定。 BasicHttpBinding
或BasicHttpContextBinding
可以使用HTTP身份验证方案,而WsHttpBinding
可以使用自定义Message安全性,您可以提供用户名和密码。
BasicHttpContextBinding
特别好,因为它可以与ASP NET会话一起使用。