如何与 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 集成

IIS 服务器服务不可用 503 MVC 应用程序

如何在RHEL7上搭建Samba服务实现Windows与Linux之间的文件共享

有啥办法让Linux和windows共享所有硬盘空间

共享服务Samba,实现liunx与Windows文件共享

如何在windows8/7中建立WebDAV服务器实现访问或共享文件