MVC身份验证与Web API共享

5
我目前有一个MVC应用程序,使用默认的“个人用户账户”选项进行身份验证。这很好用,我可以创建用户、登录并根据用户角色限制对控制器的访问。
我有一个单独的Web API应用程序,目前不使用任何身份验证。
这两个应用程序作为单独的站点托管在同一台IIS服务器上。我想将MVC应用程序的身份验证与Web API应用程序合并,因此,在用户登录MVC应用程序后,他们还可以访问Web API应用程序中适当的控制器,根据用户角色进行访问。
据我所读,我需要在两个应用程序的web.config中设置,因为它们在同一服务器上,所以身份验证会自动在两者之间共享。我尝试在Web API应用程序的控制器中的方法添加[Authorize],通过MVC应用程序登录并尝试访问该方法,但从未进入该方法。
这是我正在查看的内容:http://www.bipinjoshi.net/articles/436bc727-6de2-4d11-9762-9ee1a1e3cbea.aspx 我在这里缺少什么?我希望有人能指导我正确的方向。

只有在您将MVC和Web API托管在同一主机上时,链接才能正常工作。但在您的情况下,不是这样的。我建议您应该通过使用Bearer Jwt Token在您的Web API和MVC之间进行单点登录。 - cuongle
1个回答

1
你需要在MVC应用程序中模拟用户,使用具有访问Web Api应用程序上的Web api控制器权限的用户,例如使用在Web Api应用程序池中定义的标识作为用户。
然后,你可以像下面的代码一样使用网络凭据对Web Api进行身份验证:
WebApiProjectSoapClient client= new WebApiProjectSoapClient ();
            client.ClientCredentials.Windows.ClientCredential = new NetworkCredential("username", "password");
            client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Identification;

            client.callSomeMethod();

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

使用Forms身份验证进行模拟


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接