如何在 Asp.Net 和 Asp.Net 核心应用程序之间共享 access_token

How to get the access_token shared between Asp.Net and Asp.Net Core applications

我正在使用 Identity Server 4 提供对多个应用程序的访问,其中一些是 Asp.Net 核心,一些是经典 Asp.Net(MVC 和 WebForms)。

由于旧的 WebForms 应用程序的设计,应用程序需要共享它们的 cookie(基本上 API 是 'in' Web 应用程序,因此它受到 Web 应用程序基于 cookie 的身份验证的保护).我正在使用数据保护来实现 cookie 共享,但这会产生一个单独的问题。

如果我通过核心应用程序登录,然后导航到 WebForms 应用程序,我不知道如何让 access_token 调用其他 APIs。

在核心应用程序中,我可以从 HttpContext 中检索它:

_httpContextAccessor.HttpContext.GetTokenAsync(AuthConstants.AccessToken).Result

在 WebForms 中获取 access_token 的等效方法是什么?

对于上下文,这是我的核心应用程序身份验证配置:

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

services
.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
    options.Cookie = new CookieBuilder
    {
        Domain = configuration.CookieDomain,
        HttpOnly = configuration.CookieHttpOnly,
        Name = configuration.CookieName
    };
    options.ExpireTimeSpan = configuration.AuthTimeout;
    options.SlidingExpiration = configuration.AllowSlidingAuthTimeout;
    options.DataProtectionProvider = DataProtectionProvider.Create
    (
        new DirectoryInfo(configuration.DataProtectionKeyDirectory)
    );
})
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.Authority = configuration.AuthorizationServerUri;
    options.RequireHttpsMetadata = configuration.RequireHttps;

    options.ClientId = configuration.Client;
    options.ClientSecret = configuration.Secret;

    options.ResponseType = configuration.ResponseType;

    options.Scope.Clear();
    foreach (var resource in configuration.Scope.Split(" "))
        options.Scope.Add(resource);

    options.SignedOutRedirectUri = configuration.RedirectUri;
    options.UseTokenLifetime = configuration.UseAuthServerLifetime;

    options.SaveTokens = true;

    options.TokenValidationParameters = new TokenValidationParameters
    {
        NameClaimType = JwtClaimTypes.Name,
        RoleClaimType = JwtClaimTypes.Role
    };
});

只是为了解决这个问题,我没有找到我正在寻找的答案,最终将 API 分离到它自己的服务中,就像最初应该做的那样。这使这个问题无效。