还是一个提供wcf或者webservice的时候,如何保证安全的问题

hztltgg 2010-06-18 02:21:09
之前问过,没有反应,还是再问一次看看

比如

我有一台服务器,大磁盘,想给各个注册的用户存储文件,所以我建立一个wcf或者webservice服务,发布一些方法,如 UpFile(byte[] value,string fileName) ,保存一个字节流到服务器上去。
然后另外一个应用系统,比如论坛,已经有注册用户信息了,注册的用户可以保存一些头像或者其他东西到服务器上去,这个应用系统应用那台服务器的服务,为了区别用户,UpFile方法似乎应该修改参数列表,增加一个表示用户名的参数UpFile(byte[] value,string fileName,string userName)

现在这样的系统,我就不知道安全性如何保证,是把这个提供服务的机器放到内网并做IP限制吗?
我想把userName作为一个session的东西,这样每个方法就可以不用这个参数了,这样可不可行?如何可行,这个session是用户端生成呢?还是那个应用服务器,论坛的那个服务器生成呢?他们的原理是什么?
或者我的思路是不是完全错误了?
...全文
227 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hztltgg 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 xinyu207 的回复:]
xinyu207的胡言乱语:

现在这样的系统,我就不知道安全性如何保证,是把这个提供服务的机器放到内网并做IP限制吗?
我想把userName作为一个session的东西,这样每个方法就可以不用这个参数了,这样可不可行?如何可行,这个session是用户端生成呢?还是那个应用服务器,论坛的那个服务器生成呢?他们的原理是什么?
或者我的思路是不是完全错误了?

把这个提供服务的机器放到……
[/Quote]

我现在也是这样想,就是wcf那个完全信任应用服务器,那个论坛说是那个用户就是那个用户,加密也好,做IP限制也好,都是实现这个。我本来的想法是不信任应用服务器,而直接信任登录的用户,因为这个用户是独立的,在论坛上也是不知道密码的,是通过统一身份认证的来的。
xinyu207 2010-06-25
  • 打赏
  • 举报
回复
xinyu207的胡言乱语:

现在这样的系统,我就不知道安全性如何保证,是把这个提供服务的机器放到内网并做IP限制吗?
我想把userName作为一个session的东西,这样每个方法就可以不用这个参数了,这样可不可行?如何可行,这个session是用户端生成呢?还是那个应用服务器,论坛的那个服务器生成呢?他们的原理是什么?
或者我的思路是不是完全错误了?

把这个提供服务的机器放到内网并做IP限制吗?
那还用wcf干啥?

我想把userName作为一个session的东西,这样每个方法就可以不用这个参数了,这样可不可行?
啥是session? 通俗理解这是某个用户跟某个服务器的会话,可是你的wcf是你的web程序的一部分吗?
不是 所以这个不可行(我自己认为的...)

看了你的描述 请考虑论坛程序与wcf之间做加密解密(类似简单的权限认证) 保证wcf能确定连接是来自你的论坛 顺带把username带上 让wcf根据username去干活.


说的可能不对
mapserver 2010-06-22
  • 打赏
  • 举报
回复
2种方式:
1、扩展WCF的MessageHeader,客户端要访问,给出相应的密码。
2、对可以访问的客户端,进行权限验证。提供UserName、Password。。。
悔说话的哑巴 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 microtry 的回复:]
标准是:
如果用户迁移这些应用服务,
客户要做的仅仅是在应用程序中心修改应用程序注册信息就可以了
[/Quote]
那就是相当于QQ那样的了吧,QQ还不用注册
缪军 2010-06-21
  • 打赏
  • 举报
回复
标准是:
如果用户迁移这些应用服务,
客户要做的仅仅是在应用程序中心修改应用程序注册信息就可以了
缪军 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hztltgg 的回复:]

[/Quote]

1、认证可以有网站入口(登入后提供其他应用程序(网站)入口的跳转),也可以是你分发的dll,也可以是webservice;
2、同样的每个独立的应用可以用自己的入口(登陆页面,同样,登入后也可以跳转到其他应用)、调用你分发的dll、调用webservice 等各种方式使用这个认证服务;
3、无论有多少应用,模式就是上面这样子的,他们之间都是通过认证服务器票根票头的形式实现信任管理,
实际上你的应用程序无论是websuit还是webservice可以放在互联网的任何地方,
4、我们部署的项目就是这样:应用程序中心、门户网站、技术服务网站、文件服务器若、sqlserver2008、sqlserve2000、这是我按类别列出的,有的应用还不止一台服务器,而他们有在分布3个以上的网络里
hztltgg 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 microtry 的回复:]
在我的认证方案里,我嵌入了硬件标识,MAC地址
然后票头是一次性的,并且从创建到销毁可能都不超过1秒
结合这些措施,
我觉得安全性对已普通的商业应用应该是适用的
[/Quote]

A网站提供统一身份认证,B网站就是普通应用网站,比如一个论坛,C网站提供服务,可以存储用户资源等。

如果不独立出C网站,那么首次访问B网站的时候,自动转向A网站,输入用户名密码,登录成功后,B网站得到用户名。针对这个用户名就可以使用了,
现在想增加一些应用网站,想共享C提供的服务,所以C想独立出来,让各个网站共享,一开始我以为这是个很平常的功能,可一直找不到合适的方法。

不知您对这种情况具体如何架设有什么建议?到底那台机器建立哪些项目?谢谢
JiuchunYoung 2010-06-21
  • 打赏
  • 举报
回复
为了保证数据通讯的安全,WCF提供了三种保护措施:1)机密性(Confidentiality)2)完整性(Integrity) 3)可验证性(Authentication),这三种措施联合起来被称为CIA。并且这些措施在WCF中是默认支持的。机密性能保证传输的数据是经过加密的,不被非法监听(eavesdrop),而完整性利用数字签名技术防止数据在传输过程中被注入(injected)或篡改(tampered),而验证(Authentication)可以采用灵活的策略来处理达到的客户端请求,比如用户名密码验证,客户端证书验证等。



-----------------------------------------------------------------------------------
Web Service 的缺点很明显:

(1)效率低下,不适合做单应用系统的开发.

(2)安全问题,Web Service的没有自身的安全机制,必须借助http协议或IIS等宿主程序实现信息安全加密
-----------------------------------------------------------------------------------



Web Service安全问题

安全问题是开发和部署Web service涉及最多的问题,主要还是防止重要信息的泄露.包括非法请求和恶意攻击.网络常见的安全问题Web service都会面临.

Web service的部署方式一般包括3种:

(1)IIS托管.这个最简单,直接借助IIS,发布方式类网站发布.

(2)Console.可以驻留在控制台程序中.

(3)Windows Service.驻留在系统服务中.

最常见的就是Web service通过IIS托管发布,这个方式好处是它可以使用所有的ASP.Net的认证授权机制。

Web service处在表示层和业务逻辑层之间.当然它可以直接地与数据库交互.简单的验证办法就是调用方法里实现对请求的合法性的判断.通过验证我们就执行Web Method,返回用户数据简单的办法是使用System.Web.Services.Protocols.SoapHeader的类。来传递客户票据到服务器进行验证.

-----------------------------------------------------------------------------
缪军 2010-06-21
  • 打赏
  • 举报
回复
在我的认证方案里,我嵌入了硬件标识,MAC地址
然后票头是一次性的,并且从创建到销毁可能都不超过1秒
结合这些措施,
我觉得安全性对已普通的商业应用应该是适用的
缪军 2010-06-21
  • 打赏
  • 举报
回复
如果文件服务器能够访问认证服务器
那么:
1、一旦用户登录成功,
认证服务器就创建一个票根,

2、用户调用任何一个Web应用的时候,通知认证服务器就立马发给用一个票头,
参数列表携带这个票头送到应用程序,

3、应用程序收到这个票头,再通过认证服务器核对,获取权限等任何你想要的用户信息,
接着认证服务器销毁票头
悔说话的哑巴 2010-06-21
  • 打赏
  • 举报
回复
要不你就做成自己做的东西就自己能看到,不管其他帐号的权限有多大都不行
hztltgg 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 microtry 的回复:]
引用 3 楼 hztltgg 的回复:
可能我还是没说清楚,

就是如果一个服务是针对每个用户的,比如上传,就是上传到他自己空间,文件路径是由他用户名决定的。

这种情况如何设计比较合适,如果这个服务可以访问用户认证库,并且每次访问都带用户名密码,那是可以实现,当这个服务如果没有用户认证库,可不可以利用已有的统一身份认证系统来实现?


文件服务器能够访问认证服务器吗?
[/Quote]

就是说如果这个服务能有一个用户名密码的数据库,每次访问都有一个参数表示用户名密码,调用的时候去数据库比较,成功就执行,这样是可以的

如果没有这个数据库,那么一般是如何实现这种功能?我现在想到的就是信任应用服务器,由应用服务器认证后调用这个服务,这个提供服务的机器就放到内网做限制
缪军 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hztltgg 的回复:]
可能我还是没说清楚,

就是如果一个服务是针对每个用户的,比如上传,就是上传到他自己空间,文件路径是由他用户名决定的。

这种情况如何设计比较合适,如果这个服务可以访问用户认证库,并且每次访问都带用户名密码,那是可以实现,当这个服务如果没有用户认证库,可不可以利用已有的统一身份认证系统来实现?
[/Quote]

文件服务器能够访问认证服务器吗?
hztltgg 2010-06-21
  • 打赏
  • 举报
回复
可能我还是没说清楚,

就是如果一个服务是针对每个用户的,比如上传,就是上传到他自己空间,文件路径是由他用户名决定的。

这种情况如何设计比较合适,如果这个服务可以访问用户认证库,并且每次访问都带用户名密码,那是可以实现,当这个服务如果没有用户认证库,可不可以利用已有的统一身份认证系统来实现?
lzsh0622 2010-06-18
  • 打赏
  • 举报
回复
安全问题其实就是权限问题——信息集中,权限分明。

用户帐号唯一性:用数据库唯一索引,保证注册帐号唯一性,用较长的密码,保证帐号只有本人才能使用。

文件信息唯一性:用System.Guid.NewGuid()生成唯一文件名标识文件信息。用主从表(主外键)结构标识每个帐号的信息范围,每个帐号只对所属信息有操作权限。

上传或其他webservice服务均以此为原则进行操作。

hztltgg 2010-06-18
  • 打赏
  • 举报
回复
唉,还是没反应

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧