繁体   English   中英

如何使用托管在 .Net framework 4.6 应用程序中的登录页面对 .Net Core 3.1 上的 IdentityServer4 应用程序进行身份验证?

[英]How to use login page hosted in .Net framework 4.6 application to authenticate for IdentityServer4 application on .Net Core 3.1?

我们在 .Net framework 4.6 应用程序上有一个当前登录页面。 我们正在构建一个新的 .Net Core 3.1 IdentityServer4 应用程序,主要用于颁发令牌,但在代码身份验证流程中,我们希望重定向到我们当前的 .Net 框架 4.6 应用程序中托管的登录页面。

登录页面从 IDServer 应用程序重定向到 .Net framework 4.6 应用程序工作正常,但在 .Net framework 4.6 应用程序创建并设置 cookie 后,IdentityServer4 似乎没有响应此 cookie。

有谁知道如何在 .Net framework 4.6 应用程序中实现登录,然后重定向回 IdentityServer 并在登录后处理令牌?

在 IdentityServer 中,以下代码可以重定向到 .Net framework 4.6 应用程序:

services.AddIdentityServer(options =>
{
    options.UserInteraction.LoginUrl = "https://localhost:44352/login/";
    options.UserInteraction.LoginReturnUrlParameter = "returnUrl";
})

但是在“https://localhost:44352/login/”上运行的应用程序设置了身份 cookie 并使用提供的 returnUrl 重定向回 IdentityServer4 后,IdentityServer4 不会读取该 cookie。 我们甚至尝试使用 Microsoft 的 Identity 包使用另一个 .Net Core 3.1 应用程序创建 Identity cookie,该应用程序在 IdentityServer4 中执行此操作时有效,但在另一个应用程序中创建此 cookie 并将其传递给 IdentityServer4 时不起作用。

我没试过,但你可以做以下事情(一般情况下)

  1. 两个平台(网络应用程序)的 Cookie 域和名称应相同
  2. 两个应用程序上的机器密钥必须相同

您的应用程序(ASP.NET Core 和经典 ASP)和 IdentityServer 不共享相同的 cookie。

IdentityServer 发布自己的 cookie,并且无法在 ASP.NET 和 ASP.NET 核心之间读取会话 cookie(它们的保护方式不同)。

一般来说,我认为要获得单点登录体验,两个应用程序(ASP.NET 和 ASP.NET 核心)都需要独立地向 IdentityServer 进行身份验证并获得自己的一组令牌。 但是用户在第一次登录后只需要登录一次 IdentityServer,IdentityServer 将使用它的 cookie 记住你是谁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM