- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用微服务将现有的 ASP.NET MVC Monolithic 应用程序迁移到 .NET Core。现在,此迁移的一部分涉及将 Identity Server 4 与外部身份提供程序一起使用。迁移使用 strangler pattern因为我们正在慢慢迁移旧系统,而不是一次完成整个迁移。因此,我们必须支持使用基于 cookie 的 session 身份验证的遗留系统以及使用 JWT 不记名 token 的新微服务 API。
目前,我正在探索支持这两种身份验证的最简单方法,直到迁移 100% 完成。该网络应用程序很好,因为它仍然使用 Razor 页面和服务器端身份验证,因此可以轻松建立 session ,以及传回我的 token 以进行 api 身份验证。我的移动客户端是问题,它是使用 ionic 和以前使用的服务器端 session 身份验证构建的(在我之前..)。现在我正在使用带有外部 ISP 的 OpenID Connect 协议(protocol),我的所有身份验证流程都在移动客户端上处理,因此没有创建 session 。
选项 1:
严格使用我的 JWT 不记名 token 在我的移动应用程序上进行身份验证,并以某种方式将我的 MVC Controller 配置为能够使用 JWT 身份验证(如果它存在于 header 中)或 Cookie 身份验证(如果请求中存在 cookie(旧版 Web 应用程序))。我不确定是否需要创建自定义中间件来完成此操作,或者是否有一种方法可以在启动时配置某些东西而无需创建中间件,并且 Controller [authorize] 属性只会知道使用 cookie 或承载身份验证。我发现一篇文章解释了这在 Core 上是可能的,但还没有找到任何与 .NET 框架相关的内容。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
//configuration goes here
});
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
//configuration goes here
}
最佳答案
我最近做了类似的事情,我在同一个项目中有 API Controller 和 MVC Controller 。 API Controller 使用 JWT 进行身份验证,MVC Controller 使用 Cookie 身份验证。
这可能不会直接转化为您的问题,但希望对您有所帮助...
Startup.Auth 的设置类似于您在选项 1 中的设置。
在您的配置类中,您可以使用过滤器来选择要使用的身份验证类型:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
//Tells APIs to ignore the Default Cookie Type Authentication
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
config.SuppressDefaultHostAuthentication();
和
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
关于asp.net-mvc - 在 .Net Framework 旧版应用程序中使用 session cookie 和/或 JWT 不记名 token 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54931550/
我是一名优秀的程序员,十分优秀!