我正在尝试开发单页应用程序。
我使用ASP.NET Web API构建了一个RESTful Web服务。我使用OAuth 2.0
和Bearer access tokens
实现了身份验证。
此Web服务使用memcached
和HTTP缓存标头(Cache-Control
和ETag
)来缓存资源和响应。
现在,我非常喜欢ASP.NET MVC技术,也许这种爱让我在不应该的时候使用它。
我正在考虑在我的JavaScript应用程序和我的Web服务之间构建一个MVC中间服务器。
MVC站点会将其请求重定向(或委托)给Web服务。
我发现使用这种方法有很多优点:
我可以将我的消费者密钥(用于身份验证)存储在安全的位置,而不是直接将其存储在JavaScript应用程序中。
我可以为我的JavaScript应用程序提供cookie,这是我的REST Web服务不支持的(因为我认为它会破坏整个“ 无状态 ”并且“ 纯HTTP ”概念。
我很容易为我的观点提供全球化(本地化)。我非常喜欢ASP.NET MVC全球化框架,如果我打算创建一个独立的站点,我不知道如何添加这个功能。
我可以加密我的访问令牌cookie,并在服务器上解密它,迫使我的用户使用我的MVC代理访问Web服务,因为他不知道他的访问令牌。
说明了这些优点后,实现这一点是否值得?
添加代理服务器将使我复制HTTP缓存逻辑,并最终创建2个请求(客户端 - > MVC - > Web API )而不是1(客户端 - > Web API )。
最好的方法是什么?
答案 0 :(得分:0)
看起来您已经构建了一个优秀的RESTful Web服务,但需要解决Auth和全球化问题:
在Web API上使用此类代理或支持Cookie身份验证会使您容易受到CSRF攻击,因此您还需要实施Synchronizer Token Pattern
或some other technique来阻止此操作。但是,如果你没有其他选择,那么你应该只使用这种方法,但是你有!
假设javascript应用程序要求用户输入凭据,有不同的方法来处理auth:
两种方式都为您的JS应用程序提供了一个加密的令牌,每次调用受保护的API时都应该传递该令牌。您的应用程序需要将此令牌保留在本地存储中,并在令牌过期时刷新它。
即使在MVC方面拥有大部分内容,最终您仍然需要Web API来提供翻译的内容。所以我不确定这里的要求是什么,但一般来说,您应该能够以相同的方式在Web API上获取已翻译的资源。例如,请参阅here。 对于HTML部分 - 将其留给ASP.NET MVC,无需将每个标签转换为API。
我的回答是:不要隐藏它 - 充分利用它!