【问题标题】:MVC authentication shared with Web API与 Web API 共享的 MVC 身份验证
【发布时间】:2015-09-07 18:42:16
【问题描述】:

我目前有一个 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

我在这里缺少什么?我希望有人可以为我指明正确的方向。

【问题讨论】:

  • 该链接仅在您将 MVC 和 Web API 托管在同一主机上时才有效。但在你的情况下,它不是。我的建议是您应该使用不记名 Jwt 令牌在您的 Web api 和 mvc 之间进行 单点登录

标签: c# asp.net-mvc authentication asp.net-web-api2 authorize


【解决方案1】:

您需要从 MVC 应用程序模拟到 Web Api 应用程序,用户有权访问 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 模拟的示例。 如果您想要严格的表单模拟,您可以参考此链接:

Impersonate using Forms Authentication

【讨论】:

    猜你喜欢
    • 2016-07-03
    • 2015-06-03
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2011-04-22
    • 2015-09-17
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多