Web服务授权的最佳实践

4
我正在创建一个链接到我建立的 web 服务的网页。
现在网页很容易。我可以创建一个会话来存储登录信息,然后通过我的 jQuery URL 调用将其传递给 Web 服务。
但是,如果不同的网站在不同的域中访问我的 Web 服务 (通过 JavaScript Ajax 进行客户端访问),该怎么办?
它会调用我的 webservice/login?userid=&password=,返回 sessionID。然后该网站必须记住 sessionID 并在每个调用中包含它。
例如:order/outbound/create?address=&item=&companyName=&sessionID=435hg34kh
我感谢任何关于这个主题能够得到的帮助。
并不是这与上述问题有任何关系(我认为),我正在使用 PHP 编程 Web 服务。

这取决于编程语言。在C#中,您在设置连接时指定凭据。您有什么具体想法吗? - Vincent Vancalbergh
1个回答

2

与Web服务进行身份验证取决于HTTP / Soap协议或服务契约(通常使用令牌)。

基于首次调用检索ID,然后交换会话ID的解决方案适用于客户端调用(无法访问HTTP / Soap协议,仅服务参数,在这种情况下,通常使用基于Rest的轻型Web服务)。

业务侧调用还可以依赖Basic Authentication或WS-Security。 Ebay正在为其Web服务使用您的方法,这些服务通常从业务应用程序(而不是直接客户端浏览器)调用。

一个结果是,服务器和客户端需要维护会话令牌。最终,您需要一个使用户注销的无效化服务(防止重复使用登录令牌)。

跨域Javascript HTTP调用的基本方法在此处有记录。


这是一些非常有用的信息,谢谢。我在Web服务方面没有经验,在真正进行研究之前就开始制作了一个。根据我所学的知识,我的Web服务可能类似于RESTful Web服务。 - roguecoder
我正在使用Zend和php,使用MVC布局以允许以json格式正确返回异常(稍后将添加xml)。 目前网站和Web服务位于同一域上并共享同一会话。 然而,正如我所了解的那样,这在外部使用时不起作用。 - roguecoder
我可以进行的最简单的更改是要求从登录返回会话ID,用户需要将其存储以在以后的调用中返回。 - roguecoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接