【问题标题】:Authenticate an ASP.NET MVC 5 app (targets .net 4.5) with an ASP.NET CORE 3 auth server that runs Identity Server 4使用运行 Identity Server 4 的 ASP.NET CORE 3 身份验证服务器对 ASP.NET MVC 5 应用程序(针对 .net 4.5)进行身份验证
【发布时间】:2020-05-15 14:01:48
【问题描述】:

我目前正在使用 Identity Server 4 构建一个身份验证服务器,并带有一个针对它进行身份验证的 spa (react) 应用程序。我现在还想采用另一个当前存在的应用程序(这是 ASP.NET MVC 5,针对 .NET 4.5,当前使用 ASP.NET Identity 2 管理类来管理用户和使用 cookie 身份验证注销/登录)和更新它,以便它可以使用这个新的身份验证服务器从外部登录(这样用户可以使用现有的身份验证登录,但现在也可以使用这个身份验证服务器 - 以便可以在这个现有的应用程序和这个其他 spa 之间共享用户会话应用程序)。据我了解,问题是我们需要使用 PKCE 对身份验证服务器进行身份验证,但似乎没有办法使用 MVC 5 应用程序执行此操作 - 我可以安装 Microsoft.Owin.Security。 OpenIdConnect 包,但它不允许使用 PKCE,因为这是一个较新的东西(显然,如果您以 .net 4.6.1 为目标,则有一种方法可以使用该版本的 OpenIdConnect 包)。我不能改变我们的目标,它需要保持 .NET 4.5(升级到 4.6.1 或更高版本会导致构建和当前包出现各种问题,这将是一个比我的组织愿意承担的更大的任务此时开启)。有没有人知道使用面向 .NET 4.5 的 ASP.NET MVC 5 应用程序和使用 Identity Server 4 的身份验证服务器来完成这项工作的方法?唯一的方法是使用 GrantType.Implcit 流,而不是要求 PKCE 和 GrantType.Code,现在甚至会建议这样做吗?

谢谢!

【问题讨论】:

    标签: asp.net-mvc-5 identityserver4 openid-connect


    【解决方案1】:

    在这种情况下,您要处理 2 个客户端,即 spa 应用和 ASP.NET MVC 应用,每个客户端都可以有自己的流程(授权类型)。我们可以将authorization code flowPKCE 一起用于水疗应用程序。 Implicit flow 用于 ASP.NET MVC。

    建议将 PKCE 用于交互式应用程序:

    通过浏览器的前端通道步骤,所有“交互式”事情都会发生,例如。登录页面,同意等。这一步会产生一个授权码,代表前端通道操作的结果。

    一个反向通道步骤,步骤 1 中的授权代码与请求的令牌交换。机密客户端此时需要进行身份验证。

    你描述的 MVC 应用,只是做身份验证,不用担心使用隐式就可以了。

    我有一个实现它的帖子here

    【讨论】:

    • 这很棒,看起来正是我需要的。我确实尝试完全按照您的方式设置它,并且它可以很好地进行身份验证,但是页面卡在某种重定向循环中 - 它经常只是转到身份验证服务器以验证localhost:5000/connect/authorize 的用户?在验证用户并将其发回后立即。
    • 我的用于 cookie 身份验证的 MVC 应用程序始终使用 cookie 身份验证 (app.UseCookieAuthentication) 和 AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,而不是 AuthenticationType = "Cookies" 就像您在示例中那样,所以我一直使用它app.UseOpenIdConnectAuthentication 和 app.UseCookieAuthentication ...所以我想知道我现在是否需要将两者都更改为“Cookies” - 我还想知道我是否需要某种端点来处理响应并使用 cookie 身份验证登录一旦它知道它已通过身份验证服务器进行身份验证,它也会在本地应用程序中。
    • 1.关于redirection loop,你在mvc中有授权吗?默认行为是将所有未经授权的用户重定向到 IdentityServer,这可能导致无限循环。您可以通过覆盖 AuthorizeAttribute - HandleUnauthorizedRequest 来更改它。 here 解释 @user1368182
    • 2.对于AuthenticationType,它只是一个字符串,会影响 mvc 应用程序上的 cookie 名称,如果您使用 DefaultAuthenticationTypes.ApplicationCookie,cookie 将是 .AspNet.ApplicationCookie,但如果您使用 Cookies,cookie 名称将是 .AspNet.Cookies。顺便说一句,我建议您使用Cookies,因为DefaultAuthenticationTypes 是“Microsoft.AspNet.Identity”上的一个枚举,我们在这里不需要/使用@user1368182
    • 3.关于自定义端点,不需要任何端点,OWIN 中间件会处理这一切 - 如果尚未收集更多详细信息,我建议您打开日志,请参阅 here 获取 nlog 示例 @user1368182
    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多