我正在创建一个可以从asp.net中的Web表单调用的Web服务。 Web服务如何检查用户是否已登录以及是否是实际请求服务的登录用户?
感谢
答案 0 :(得分:1)
它不能。由于您要从 ASP.NET中调用Web服务,因此您正在构建一个3层应用程序。
第1层是浏览器,第2层是ASP.NET Web应用程序。它们共享cookie和会话变量,因此ASP.NET始终可以对用户进行身份验证。你已经知道了。
第3层是Web服务。 2和3之间的通信是通过不同的HTTP连接完成的,共享不同的cookie(实际上没有)和会话变量(实际上没有,因为调用是无状态的)。
然后,您无法允许第3层上的Web服务对第1层上的客户端进行身份验证。
<强>无论其............... 强>
仍有可能,但前提是您的网络服务本地到您的ASP.NET网络应用程序。实际上,这不太可能发生,因为Web服务是为远程呼叫而不是本地呼叫而建立的。我不认为这是你的情况。
答案 1 :(得分:0)
如果这是本地Web服务,正如djechelon建议的那样,他们将分享会话状态。使用djechelon的答案,忽略我的:)
如果没有:问更大的问题:什么阻止某人在您的网络应用程序的上下文之外调用您的Web服务:使用soapUI之类的工具?
1)锁定您的服务(使用WCF安全性)。 http://msdn.microsoft.com/en-us/library/ms731925.aspx
2)创建一个检查身份验证/授权的本地Web服务,并调用webservice:传递授权信息。
这是一种评估WS对冗余Webservice调用执行的操作的方法。如果一个叫另一个的WS符合你的性能需求,那就是你的耻辱。
答案 2 :(得分:0)
您可以在WebMethod中启用Session,如下所示:
person1
work1
1111
1,2,3,4,5,6,7,8,9,10
person2
work2
2222
1,3,2,4,5,2,3,4,1,3
person3
work3
3333
4,5,3,7,2,3,4,2,1,5
验证方法:
[WebMethod(EnableSession = true)]
public string DoSomthing(string para)
{
user = new SystemUser();
if (!user.Authenticate())
{//401 Unauthenicated}
}