是否可以在面向 .net 标准 2.0 的类库中使用 System.Web



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

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

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

我正在创建一个面向 .net 标准 2.0 的类库,该类库可以在我的 api 中使用,该 api 负责创建 cookie 部分并将其添加到请求中,然后再将请求转发到我的 asp.net 应用程序。如何在我的类库中创建表单身份验证 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; 

No.System.Web只是 .NET 框架。它不包含也不与.NET Standard,任何版本兼容。此外,窗体身份验证通常已弃用(作为 ASP.NET 成员资格的一部分(,因此只有 ASP.NET(.NET Framework(才能使用它。

今后,如果需要共享身份验证,则必须切换到 ASP.NET(核心(标识并使用数据保护 API,而不是 Forms Auth 所依赖的旧式计算机密钥加密。

不过,就其价值而言,API 不应使用 cookie 身份验证。Cookie 是客户端与 API 交互的一种非标准方式,它们也是一种状态形式,而 API 应该是无状态的 (REST(。相反,您应该执行基本或持有者身份验证之类的操作,使用Authorization标头使用用户/传递(基本(或令牌(持有者(授权每个请求。

相关内容

  • 没有找到相关文章

最新更新