如何与 Windows 服务应用程序共享 MVC 5 Identity 2.0 身份验证(尤其是 SignInManager)?
Posted
技术标签:
【中文标题】如何与 Windows 服务应用程序共享 MVC 5 Identity 2.0 身份验证(尤其是 SignInManager)?【英文标题】:How to share MVC 5 Identity 2.0 authentication (esp SignInManager) with windows service application? 【发布时间】:2017-06-24 05:04:55 【问题描述】:我开发了一个使用 Identity 2.0 对用户进行身份验证的 MVC 5 应用程序。效果很好。
我有一个为网络用户提供专门服务的 Windows 服务。 Web 用户通过 MSMQ 向服务发出请求,该服务在与 IIS 并行的 Web 服务器上运行。当原始请求完成时,服务通过 MSMQ 异步响应。
该服务目前不使用 HTTP,也没有 HttpContext,这意味着我不能像在 MVC 5 Web 应用程序中那样对 Owin 使用相同的方法。
我需要windows服务通过与用户相同的Identity 2.0方案进行身份验证,并计划将静态用户名和密码放入服务的app.config文件中。但是,我无法弄清楚如何实例化 Owin 组件,以便我可以访问 UserManager 并对用户进行身份验证。
更新: 我想出了一种使用默认 Identity 2.0 规范中的类在没有 OWIN(见下文)的情况下获取 UserManager 的方法。
using Microsoft.AspNet.Identity;
<snip>
var userManager = new ApplicationUserManager(new ApplicationUserStore(new ApplicationDbContext()));
现在我一直在尝试创建 SignInManager,因为它直接依赖于构造函数中的 OWIN。所有建议都表示赞赏。
有没有人举例说明如何做到这一点?
【问题讨论】:
如果您创建一个 Windows 服务可以用来对 Web 服务器进行身份验证的 REST 客户端怎么办?这样就没有代码重复,也不必在 app.config 中提供数据库凭据 【参考方案1】:SignInManager
与 OWIN 一起在 HTTP 回复上设置身份验证 cookie。如果您说您的服务没有运行 HTTP(除非我误解了您的问题),那么尝试使用 SignInManager
是没有意义的,因为无处可设置 cookie。我建议您回顾一下您对 Identity 的需求和需要,以及如何验证您的服务
【讨论】:
以上是关于如何与 Windows 服务应用程序共享 MVC 5 Identity 2.0 身份验证(尤其是 SignInManager)?的主要内容,如果未能解决你的问题,请参考以下文章
如何将跨域资源共享与 Spring MVC 4.0.0 RESTful Webservice 集成