我正在构建一个.NET MVC企业Web应用程序,该应用程序必须能够对来自不同公司的用户进行身份验证。其中一个主要要求是确保用户不需要创建和记住新凭据来使用应用程序,而是应该继续使用他们用来访问公司内部网中的应用程序的任何凭据。
由于应用程序将托管在Extranet上并且需要处理针对多个域(即多个Active Directory)的身份验证,因此我们希望每个客户端都能设置应用程序可以与之交互的安全令牌服务(AD FS)。实施索赔认证。
MVC应用程序将检查用户是否经过身份验证,如果没有,则启动以MVC应用程序获得与用户关联的SAML声明结束的工作流程。
此时,用户已通过身份验证并可以访问MVC应用程序。但是,应用程序本身是一个现代的Web应用程序,它使用相当多的JavaScript来使用处理大多数业务逻辑的.NET Web API。 我的主要问题是如何保护此API 。我想确保发送到此服务器的唯一请求是从有效源发送的,并且使用该服务的用户有权这样做。
我可以采用两种方法来使用API:
为了选择一种方法,我首先需要找到一种方法来保护API。
我发现的最直接的解决方案是HMAC身份验证 - http://bitoftech.net/2014/12/15/secure-asp-net-web-api-using-api-key-authentication-hmac-authentication/。但是,这种方法要求所有API请求直接来自MVC服务器,因为密钥需要位于MVC服务器上。
我可以实现的第二种方法是OAuth 2.0的一些风格。我熟悉的口味可以在http://alexbilbie.com/guide-to-oauth-2-grants/找到:
这不是我想采取的方法。 MVC应用程序已经收到了用户声明 - 他们不应该仅仅因为API需要索赔而再次这样做。 (我有一个后续问题,询问我是否可以简单地将声明传递给API服务器)
我喜欢这种方法听起来的方式,因为我将能够在客户端执行API请求(即JavaScript代码),但是它遇到了与第一种方法相同的问题。
这种方法是不可能的 - 我不希望MVC应用程序或API保留用户的凭据。
这种方法是列出的唯一合理的OAuth方法 - 但是我没有看到这种方法与上面详述的HMAC认证之间存在重大差异。
答案 0 :(得分:0)