与 Web API 共享的 MVC 身份验证

sfi*_*_29 5 c# authentication asp.net-mvc authorize asp.net-web-api2

我目前有一个 MVC 应用程序,使用默认的“个人用户帐户”选项进行身份验证。这很好用,我能够根据用户角色创建用户、登录并限制对控制器的访问。

我有一个单独的 Web API 应用程序,目前不使用任何身份验证。

这两个应用程序都作为单独的站点托管在同一 IIS 服务器上。我想将来自 MVC 应用程序的身份验证合并到 Web API 应用程序中,因此在用户登录到 MVC 应用程序后,他们还可以根据用户角色访问 Web API 应用程序中的相应控制器。

从我一直在读,我需要设置<authentication mode='Forms'>web.config这两个应用程序,因为他们是在同一台服务器上,验证自动在两者之间共享。我尝试[Authorize]在 Web API 应用程序的控制器中添加一个方法,通过 MVC 应用程序登录并尝试访问该方法,但从未输入该方法。

这就是我一直在看的:http : //www.bipinjoshi.net/articles/436bc727-6de2-4d11-9762-9ee1a1e3cbea.aspx

我在这里缺少什么?我希望有人能指出我正确的方向。

小智 1

您需要使用有权访问 Web Api 应用程序上的 Web api 控制器的用户(例如定义为 Web Api 应用程序池上的身份的用户)从 MVC 应用程序模拟到 Web Api 应用程序。

然后您可以使用网络凭据对 Web Api 进行身份验证,如下代码所示:

WebApiProjectSoapClient client= new WebApiProjectSoapClient ();
            client.ClientCredentials.Windows.ClientCredential = new NetworkCredential("username", "password");
            client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Identification;

            client.callSomeMethod();
Run Code Online (Sandbox Code Playgroud)

这是 Windows 模拟的示例。如果您想要严格的 Forms 模拟,可以参考此链接:

使用表单身份验证进行模拟