繁体   English   中英

如何防止WCF客户端修改DataContract的内容?

[英]How to prevent a DataContract's content from being modified by the client with WCF?

我正在构建一个需要用户在启动时登录的应用程序。

认证过程如下:

  • 用户输入用户名/密码。
  • 客户端将用户名+密码发送到Web服务。
  • Web Service使用数据库中的哈希密码对用户进行身份验证。
  • Web Service向客户端返回一个令牌,该令牌包含以下三个值之一:

    1)用户名无效。

    2)密码无效。

    3)用户已通过身份验证。

  • 客户端使用令牌来确定下一步行动。

  • 客户端随后进行的每个后续调用都将令牌传递给服务。 如果用户未通过身份验证,该服务将拒绝呼叫。

令牌封装在DTO(即DataContract)中。 令牌本身是一个DataMember。 DataMembers要求该属性具有一个setter和一个getter。 这意味着客户端现在可以为令牌设置一个值,这很不好。 客户现在可以从技术上将自己标记为已认证。

我将如何阻止客户端修改令牌的值? 有什么模式可以帮助我吗?

服务器必须“知道”令牌并对其进行验证。

您无法限制客户端更改令牌。 考虑一下-我向您发送了DTO,基本上是一堆信息。 稍后,您将该捆绑包发回给我。 我怎么可能阻止您更改捆绑包中的内容? 我唯一能做的就是检查捆绑包是否有效,您没有更改任何我不希望您更改的内容,依此类推。

如果您的令牌是简单的经过authenticated标志,那将是一场灾难。 想象一个网站接受了刚刚信任我的logged in参数。 您告诉网络服务器您已经登录,并且相信您吗? www.visa.com/account.html?account=123456&loggedIn=true似乎不太安全。

在平台不可知的世界中,您可以使用加密来创建可以验证的安全令牌。 您已经有一个令牌,因此也许您可以向令牌中添加一些加密的内容以验证用户。 客户端不知道数据是什么,因此无法轻松解密。 他们需要在每次请求时将令牌返回给服务器。 服务器可以解密令牌,以确认用户已通过身份验证。

当然,令牌需要过期,并且需要安全且不可猜测。 在Windows世界中,使用Windows身份验证或一种内置的.NET身份验证模式可能更简单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM