【问题标题】:Securing WCF service in an ASP.net financial application在 ASP.net 财务应用程序中保护 WCF 服务
【发布时间】:2014-07-20 10:21:35
【问题描述】:

我有一个带有 WCF 服务的 MVC4 ASP.net 金融应用程序。目前的情况还不够安全,我需要你帮忙。

当前情景:

  1. 用户使用登录表单登录,我使用包含用户 ID 和密码的 JSON 对象将他的登录详细信息发送到 WCF 服务:

    http://example.com:22559/Login

    这会返回一个带有真假的 JSON 对象。

  2. 如果是真的,我用ASP函数

    FormsAuthentication.SetAuthCookie(loginModel.UserID, loginModel.RememberMe);
    

    设置授权cookie以供以后使用。

  3. 当用户添加一个新交易时,我会发送一个包含交易详细信息的 JSON 对象没有密码到:

    http://example.com:22559/AddTransaction

    我在这里依赖的是,如果用户没有登录,MVC 控制器将不允许用户访问事务页面。


问题是现在任何人都可以在不输入密码的情况下偷偷溜出并添加交易!,使用 URL:

http://example.com:22559/AddTransaction

我现在需要做的是让 WCF 服务本身安全,但我不知道如何做到这一点,除非让用户在每次添加新事务时都输入他的用户名和密码!那么,什么这样做的正确方法是什么?

提前致谢。

【问题讨论】:

  • 获得一些专业帮助。特别是加密专家。我想说的是:如果这是一个严肃的财务申请,而你没有以最先进的方式解决这个问题,你会遇到一些严重的法律问题。
  • 谢谢 Mare,这是给我的,一个学习应用。但我不知道正确的方法,也找不到有用的教程来做到这一点。如果你能指导我,请做。
  • 我建议从 owasp.org/index.php/Web_Service_Security_Cheat_Sheet 开始,然后阅读大量关于 stackoverflow.com/questions/853620/… 的内容

标签: asp.net wcf asp.net-mvc-4 authentication


【解决方案1】:

MVC 4 的控制器通常使用 MemberShipProvider 进行身份验证,使用 RoleProvider 进行授权。因此,您的 WCF 服务可能会共享提供程序。

对于身份验证,您无需在 WCF 代码中执行任何操作。对于授权,可以很方便地用定义了 Role 名称的 PrincipalPermissionAttribute 来装饰各个操作实现函数(不是接口)。其余的将在配置和运行时完成。

更多详情,只需搜索“membershipprovider wcf”,您会在 MSDN、CodeProject 和 StackOverflow 中找到很多文章/教程。

请注意,在 MVC 5 中,如果您要迁移到 MVC5,则默认使用 Identity 2.0,并且默认情况下不会使用 MembershipProvider 和 RoleProvider。尽管如此,您的 WCF 代码应该保持不变,只有 ServiceModel 下的一些元素需要适应新的自定义身份验证和授权,客户端代码也应该保持不变,无需更改配置。

【讨论】:

  • 谢谢安迪,但我有一个问题。如果我在 WCF 中使用了 ASP MemberShipProvider,我是否会被限制为仅将 WCF 与 ASP 一起使用?或者我可以将它与其他东西一起使用,如 Android 应用程序。例如?
  • provider things是服务端的实现,包括安卓客户端在内的客户端都不知道。换句话说,只要客户端请求包含凭据,它们就不应该关心 WCF、ASP、MVC 或 .NET。比如说,如果绑定是 http 或 https,则传输是嵌入了凭据的 SOAP。 SOAP 是平台中立/独立的。
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 2020-03-07
  • 2013-11-12
  • 1970-01-01
相关资源
最近更新 更多