2

我们有一个 Api,它在每个请求上都需要一个“Api-Key”,在所有经过身份验证的请求上都需要一个用户“AccessToken”。目前,当用户进行登录时,他们会返回一个“AccessToken”,该“AccessToken”将从那里随每个请求一起发送出去。

我的问题涉及我们当前使用此 API 的网站的工作流程。注意 - 网站和 Api 位于不同的解决方案/应用程序域中,目前它们在同一个盒子上,但后来我怀疑它们会是。

目前,该网站将通过其 MVC 控制器/操作方法向 Api 发出所有请求。起初,我认为这是启动并运行它的最简单方法,而无需编写大量 jquery 来完成客户端的所有请求。此外,服务器知道它的 Api-Key 并使用存储了 AccessToken 的表单身份验证。

我想我们都知道,如果我跳过网络服务器,直接从 Jquery 转到 WebApi,它会更快,但是,在我对这个过程的初步审查中,我遇到了一个关于身份验证的障碍。

最后是问题:)

我知道我可以在 ajax 中使用 before send 并修改标头,但是,1 如何将 accesstoken 和网站 API-Key 安全地发送到客户端以将其发送到网络上?

如果我错了,请告诉我,但如果我使用 Razor 并使用 ViewData / ViewBag 并将其转换为视图中的 javascript,那么 AccessToken 和 Api-Key 肯定会坐在那里让全世界看到它们何时执行视图源?

当前的

Jquery -->  MVC Action -->  WebApi

快点

Jquery -->  WebApi

我注意到大多数 Api Wrapper 都是在 MVC 控制器/动作中使用的,因此我实际上认为我这样做的方式可能是正确的方式?

干杯

4

1 回答 1

1

如果您需要对您的 API 密钥保密,那么您应该将其远离客户端

我认为您应该保持原样代理事物。如果您需要保护从客户端到服务器的通信,请这样做,但不要将您的 API 密钥直接暴露给客户端。

如果访问令牌仅持续一小段时间,并且您的 API 提供的方法不需要高度安全性,那么您可以简单地使用访问令牌公开它们,并在服务器上隐藏您的 API 密钥。

无论哪种方式,我认为您都是在代理。只是一个问题,您希望保护从客户端到服务器的通信的安全程度。然后可以按原样或您认为合适的其他方式实现从服务器到 API。

除此之外,我建议让你的控制器尽可能地笨拙。让他们首当其冲地把跑腿的工作交给进行 API 调用的服务层。

于 2012-12-19T04:37:39.110 回答