System.Web 可以在面向 .net 标准 2.0 的 class 库中使用吗

Can System.Web be used within a class library that targets .net standard 2.0

我有一个使用表单身份验证的 Asp.net 应用程序。我正在构建一个 asp.net 核心 API,它将接收一个 JWT 令牌,该令牌在有效负载中包含用户信息。此 API 需要调用 asp.net 应用程序来满足用户请求。为了让 asp.net 应用程序处理此请求,它需要表单身份验证 cookie 以将其识别为有效的登录用户。

换句话说,API需要在实际用户发出请求的请求转发刺激场景中生成并发送认证cookie。

注: 正在创建 API 以将 asp.net 应用程序的功能公开为 public API,而无需用户登录到 asp.net 应用程序 UI 直接先。

我正在创建一个以 .net 标准 2.0 为目标的 class 库,它可以在我的 api 中使用,负责创建 cookie 部分并在转发请求之前将其添加到请求中到我的 asp.net 应用程序。如何在我的 class 库中创建 FormAuthenication cookie?我发现了以下代码,想知道如何在我的库中做类似的事情?

string userData = string.Join("|",GetCustomUserRoles());

  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1,                                     // ticket version
    username,                              // authenticated username
    DateTime.Now,                          // issueDate
    DateTime.Now.AddMinutes(30),           // expiryDate
    isPersistent,                          // true to persist across browser sessions
    userData,                              // can be used to store additional user data
    FormsAuthentication.FormsCookiePath);  // the path for the cookie

  // Encrypt the ticket using the machine key
  string encryptedTicket = FormsAuthentication.Encrypt(ticket);

  // Add the cookie to the request to save it
  HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
  cookie.HttpOnly = true; 

没有。 System.Web 仅限 .NET Framework。它不包含也不兼容 .NET Standard,任何版本。此外,一般来说,Forms Auth 已被弃用(作为 ASP.NET 成员资格的一部分),因此只有 ASP.NET (.NET Framework) 才能使用它。

今后,如果您需要共享身份​​验证,则必须切换到 ASP.NET(核心)身份并利用数据保护 API,而不是 old-style 机器密钥加密Forms Auth 依赖于。

尽管如此,API 不应使用 cookie 身份验证。 Cookie 是客户端与 API 交互的一种 non-standard 方式,它们也是一种状态形式,而 APIs 应该是无状态的 (REST)。相反,您应该使用 Authorization header 来使用 user/pass (基本)或令牌(承载)对每个请求进行授权。