【发布时间】:2018-08-21 13:54:40
【问题描述】:
我有一个 MVC Web 应用程序、一个 WPF 客户端和 Web API 服务器。我非常想将 API 控制器拉入 MVC 应用程序,并且只有一个应用程序/api。我这样做的主要原因是为应用程序用户和 API 客户端等提供一个登录程序。
我想做的是将SignInManager<ApplicationUser 注入Token 控制器并使用
var result = await _signInManager.PasswordSignInAsync(login.Username, login.Password, false, false);
使用与构建到 MVC 项目中相同的密码哈希来验证用户名和密码。我不想复制任何此类功能。我也希望通过这个实现登录,提供 JWT 令牌,以便 WPF 应用程序访问 API 端,以及标准登录 cookie,以便授权正常的 MVC 应用程序请求。
我应该如何以最少的代码重复来解决这个问题?
想法:
也可以使用一个 MVC 应用程序作为 REST 服务器。如果我获得 JWT 的 Login 操作也让我登录,例如使用_signInManager.PasswordSignInAsync,我还应该获取允许我在内部访问受保护操作的cookie,并在外部使用包含JWT 的授权标头。
【问题讨论】:
-
基本上,您应该将所有通用代码分解到两个项目都可以使用的类库中。这可能意味着移动所有实体、上下文、身份设置等。您不需要单独的帐户;可以在多个不同场景中以多种方式对单个用户进行身份验证/授权。出于某种原因,该部分与实际帐户持久性是分开的。但是,如果你想使用 JWT 之类的东西,你可能需要做一些手动工作。
-
使用 IdentityServer 之类的东西可能会更好,它可以分散您的身份验证和授权,并开箱即用地处理多个不同的身份验证工作流。
-
以上cmets是在我完全修改问题之前制作的,以防有人质疑相关性。
-
@ProfK 这绝对是可行的。只是有很多事情要做。使用身份共享 MVC 和 Web API 的整体 Web 应用程序是可能的。我这么说是因为我以前做过。这就是为什么我说有很多事情要做。范围太广,无法在此介绍。
-
MVC 应用和 API 是否都在运行 ASP.NET Core?
标签: c# security asp.net-core asp.net-core-mvc asp.net-identity