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

时间:2017-07-03 20:14:39

标签: c# authentication cookies model-view-controller asp.net-web-api2

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

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

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

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

我也想尝试OAuth2方式,但是我找不到一个很好的指南,介绍如何根据SQL Server的自定义用户表实现身份验证服务器(以及Google结果列表的前五页)帮助我,他们确实让我对这个话题更加困惑,整个OWIN和Katana事情......)。

我可以提供进一步的信息,以防有人愿意帮助我。

提前致谢, 斯特凡诺。

1 个答案:

答案 0 :(得分:0)

这是一个关于如何实施自己的OAuth2服务器的好教程:

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

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

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

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