2015-06-22 52 views
2

我目前拥有一个使用默认“个人用户帐户”选项进行身份验证的MVC应用程序。这很好,我可以创建用户,登录并根据用户角色限制对控制器的访问。与Web API共享的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

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

+0

如果你的主机在同一台主机上你的MVC和Web API的连接才能正常工作。但就你而言,事实并非如此。我建议你应该使用持有人Jwt Token在你的web api和mvc之间进行单点登录。 –

回答

0

您需要从您的MVC应用程序模拟到Web Api应用程序,用户可以访问您的Web Api应用程序上的Web API控制器,例如与Web API应用程序中定义为身份的用户池。

然后你就可以验证与网络凭证的网络API像波纹管代码:

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

      client.callSomeMethod(); 

这是例如与Windows模拟。 如果你想严格窗体模拟你可以reffer这个链接:

Impersonate using Forms Authentication