我正在为服务开发一个公共 HTTP 后端 API。最重要的是,有一个让用户登录的网络应用程序,应该使用后端 API 来满足用户请求。API 支持 OAuth2,Web 应用程序是单页应用程序,带有大量 javascript。
我关心的是浏览器和网络应用程序应该如何与 API 对话。我找到了两种可能的方法。
浏览器直接使用API
当用户输入他的凭据进行登录时,Web 应用程序将它们传递给 API 并获得一个 OAuth access_token,它直接传递给浏览器并存储在一些 cookie 中。然后,对 API 的每个请求都是通过 JSONP 直接从浏览器发出的。当用户注销时,Web 应用程序会销毁会话。
浏览器与 Web 应用程序对话,后者与 API 对话
当用户输入他的凭据进行登录时,Web 应用程序会将它们传递给 API 并获得 OAuth access_token。使用用户创建会话,并且 access_token 存储在会话中。当浏览器需要与 API 通信时,它会通过 Web 应用程序。Web 应用程序在会话中使用访问令牌,调用 API,并将响应传递给浏览器。
两种方式在性能和安全性权衡方面各有利弊。你怎么看?
PS:据我所知,twitter 直接从浏览器使用它的公共 API,但通过会话 cookie 进行身份验证。这意味着他们的 API 也支持 cookie 会话?