gpt4 book ai didi

asp.net-mvc - 在 .Net Framework 旧版应用程序中使用 session cookie 和/或 JWT 不记名 token 进行身份验证

转载 作者:行者123 更新时间:2023-12-03 23:52:50 26 4
gpt4 key购买 nike

我目前正在使用微服务将现有的 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
}

选项 2:
在我的旧应用程序服务器中创建一个新端点,并让我的移动客户端将我收到的不记名 token 传递给端点以建立 session 。现在我的移动客户端可以在每个请求中传递 cookie 和不记名 JWT token ,并让服务器决定它想要如何验证。这显然增加了一点复杂性,因为现在我正在维护一个 cookie 和 token 到期等,但它只会在迁移结束之前。

选项 3:
???

问题:
我花了很多时间研究这两个选项的有效性,并且大多只获得与 .NET 核心相关的资源,但在 .NET Framework 上却很少。我只需要在短时间内支持遗留应用程序,所以我现在正在寻找最简单的解决方案,而不是最干净的解决方案。想知道是否有人做过类似的迁移可以提供解决方案或关于他们如何实现这一点的见解?

最佳答案

我最近做了类似的事情,我在同一个项目中有 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));
这里剩下的部分是实际构建 token 然后使用它。

Helpful material for using JWT with Identity

关于asp.net-mvc - 在 .Net Framework 旧版应用程序中使用 session cookie 和/或 JWT 不记名 token 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54931550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com