【问题标题】:How to use the same Identity in ASP.NET Web API and MVC?如何在 ASP.NET Web API 和 MVC 中使用相同的标识?
【发布时间】:2016-02-18 21:42:59
【问题描述】:

我有以下场景:

  1. MVC 应用程序 - 安装了 Identity 的 ASP.NET MVC 应用程序。
  2. SPA 应用 - Angular SPA 应用,位于 MVC 应用内的某个区域。
  3. Web API - SPA 应用程序使用的 ASP.NET Web API 服务。

MVC 应用程序和 Web API 都应该使用相同的用户帐户。所以,现在,我在 MVC 应用程序中安装了 Identity。其中会有一个视图,它将加载 SPA 应用程序,并且 SPA 应用程序将向 Web API 发出请求。但是 Web API 只有在用户通过身份验证后才能工作,因此它需要客户端发送的 Bearer Token。因此,当用户在 MVC 应用程序中通过身份验证并使用 SPA 应用程序打开视图时,我应该以某种方式为在 MVC 应用程序中经过身份验证的同一用户获取令牌,将其放在 SPA 应用程序中,然后从SPA 应用程序 JavaScript 到 Web API。

这可能吗?还是有更好的方法?

【问题讨论】:

  • MVC和Web API可以共享cookie吗?换句话说,它们是否在同一个域中?
  • @Win - Web API 是否只允许使用 Token 身份验证?
  • 可以,但是您希望在 Web API 和 MVC 之间共享身份验证。使用基于 cookie 的 ASP.Net 身份更容易,这是我验证 AngularJS SPA 的方式。
  • 您可以尝试查看 Owin dll,它提供了一种使用 GetOwinContext().GetUserManager() 访问 UserManager 对象的方法。你可能想看看这个解决方案来帮助你,以防万一:stackoverflow.com/questions/24001245/…
  • @Yulian 你有什么好的解决方案吗?谢谢

标签: angularjs asp.net-mvc authentication asp.net-web-api token


【解决方案1】:

这是你可以做的,创建一个新的类库项目。将所有身份组件从您的 mvc 项目移动到该库。将该项目引用到 web api 项目和 mvc 项目。

我已经完成了几个需要 api 和 mvc 的项目。这个对我有用。试试这个,它肯定会奏效。如果您没有正确理解,请告诉我

【讨论】:

    【解决方案2】:

    这不是您问题的真正答案,但如果您仅使用 Asp.net MVC 来引导您的单页应用程序,那么您可以选择仅使用 Web api 身份验证。在您的水疗中心启动后,您可以检查您是否有经过身份验证的用户并获取用户特定信息来为您的用户自定义页面。

    在这种情况下,您不需要使用 Asp.net MVC 身份验证,但有时您可能需要在验证码验证等情况下使用 Asp.net 会话(如果您的验证码库需要)。对于这种情况,您可以为您的特定 web-api 调用启用会话,如下所示。

        //WebApi Session
        protected void Application_PostAuthorizeRequest()
        {
            if (HttpContext.Current == null)
                return;
    
            var request = HttpContext.Current.Request;
            if(RequireSession(request))
                HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
        }
    
        private static bool RequireSession(HttpRequest request)
        {
            return request.AppRelativeCurrentExecutionFilePath == "~/api/user" && request.HttpMethod == "POST";
        }
    

    不是:如果您为所有 web-api 调用启用 asp.net mvc 会话,那么您的请求将按顺序处理。不推荐!

    Concurrent Requests and Session State

    【讨论】:

      猜你喜欢
      • 2018-06-09
      • 2015-01-15
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多