从 MVC WebApp 使用 WebAPI 后端的最佳实践



我正在创建一个基于WebAPI的SaaS应用程序。此 WebAPI 可以单独使用,无需用户界面,需要对 WebAPI 发出的每个请求发送基本身份验证,并在调用和验证方法时返回一些对象。

现在我面临着一个大问题:我正在 MVC 中创建一个 WebApp(但它可以是任何语言(,我无法弄清楚如何在不需要保留用户名和密码的情况下调用我的 WebAPI 端点,以便在每次调用方法时对 WebAPI 请求进行身份验证。

在这种特殊情况下,最佳实践是什么? 我似乎找不到任何合适的解决方案...

到目前为止,我已经尝试在HttpContext.Response.Cookies.Add方法的自定义实现的帮助下创建自定义cookie,我将加密的用户名和密码对存储在Cookie的userData中。通过这种方式,我可以调用 WebAPI 方法,每次使用正确的用户名和密码指定BasicAuthenticationCredentials,但从长远来看,这似乎是一种非常难以维护的工作方式。

我也想尝试 OAuth2 的方式,但我找不到关于如何基于 SQL Server 的自定义用户表实现身份验证服务器的好指南(谷歌结果列表的前五页对我没有帮助,他们确实让我对这个话题更加困惑, 整个OWIN和武士刀的事情...

如果有人愿意帮助我,我可以提供更多信息。

提前感谢, 斯特凡诺。

这里有一个关于如何实现自己的OAuth2服务器的好教程:

http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

使用 OAuth 背后的主要思想是,您只需要一个用户名和密码即可进行第一次请求,之后,您将获得一个访问令牌,该令牌将用于访问 API。此访问令牌将具有生存期,一旦过期,用户将需要请求新的访问令牌(通过再次发送用户凭据,或使用将用作凭据替代的刷新令牌(。

这种方法背后的好处是,由于访问令牌具有生存期,即使其中一个令牌遭到入侵,您也可以撤销它(或等到它过期,例如,您可以创建每 5 分钟甚至更短更新一次的令牌。这取决于你(,客户会自动要求一个新的,这将是故事的结局。另一方面,如果您始终收到用户凭据并且这些凭据遭到破坏,则用户将需要更改它们,并且风险将一直存在,直到用户最终更改其凭据(这是一个手动过程,用户需要了解此问题,而OAuth方法只是一直刷新这些令牌(。

此外,请记住通过HTTPS保持所有通信,因为令牌是敏感信息,并且您不希望窃听者通过拦截通信来获取访问令牌,甚至更糟的是,刷新令牌。如果他能够做这样的事情,那么即使是每分钟刷新一次令牌也将是一种无用的方法,以防止有人获得您发送的每个令牌。

最新更新