![](/img/trans.png)
[英]What's involved with using Salesforce as a client to a WCF service that has a DataContract that contains classes that inherit from a base class?
[英]How to prevent a DataContract's content from being modified by the client with WCF?
我正在构建一个需要用户在启动时登录的应用程序。
认证过程如下:
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.