将自定义用户对象传递给 WCF

发布于 2024-10-25 22:11:25 字数 108 浏览 4 评论 0原文

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

I've implemented a custom ASP.net membership provider to deal with forms authentication. The custom provider uses a custom User object for authentication and authorization. I was wondering If I can pass this object to each WCF call without adding it to the parameters list?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

妄司 2024-11-01 22:11:25

由于您已经在使用 MembershipProvider,因此您也可以在 wcf 上使用它,因此两者都由相同的机制保护。

请参阅 msdn 上的这篇帖子

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 会员资格提供程序很可能会满足您真正的需求,并添加一些安全性。

Since you are already using a MembershipProvider you can utalize that on wcf as well so both are secured by the same mechanism.

See this post on msdn.

Windows Communication Foundation (WCF)
developers can take advantage of these
features for security purposes. When
integrated into an WCF application,
users must supply a user name/password
combination to the WCF client
application. To transfer the data to
the WCF service, use a binding that
supports user name/password
credentials, such as the WSHttpBinding
(in configuration, the wsHttpBinding
Element) and set the client credential
type to UserName. On the service, WCF
security authenticates the user based
on the user name and password, and
also assigns the role specified by the
ASP.NET role.

Another option would be to create a custom IAuthorizationPolicy that pulls off your user via

OperationContext.Current.IncomingMessageHeaders.GetHeader<T>

And than setup your principal like the following:

evaluationContext.Properties[Constants.EvaluationContextPrincipal] = principal;

Here is some more information on creating a custom IAuthroizationPolicy. With this method you could achieve what you want without passing your user to the method.

Just be warned if you go this route a crafty person could end up impersonating the user by simply suppling a bogus user in your header.

Using the asp.net membership provider for wcf would most likely get you what you are really after plus adding some security.

套路撩心 2024-11-01 22:11:25

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

我不知道您的自定义用户对象,但就 WS* 和大多数相关安全标准而言,您的用户对象将具有用户名和密码。

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

BasicHttpContextBinding 特别好,因为它可以与 ASP NET 会话一起使用。

You definitely should not add this to the parameters each method.

I do not know about your custom user object but as far as WS* and most security standards concerned, your user object will have username and password.

The answer depends on the binding you use. BasicHttpBinding or BasicHttpContextBinding can use HTTP authentication schemes while WsHttpBinding can use custom Message security which you can provide user name and password.

BasicHttpContextBinding is especially good since it can work with ASP NET session.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文