我正在制作 SPA,并决定使用 JWT 进行身份验证/授权,并且我已经阅读了一些关于 Tokens 与 Cookies 的博客。我了解 cookie 授权的工作原理,并了解基本令牌授权的工作原理。问题是,我看不到刷新令牌如何适应它,在我看来它降低了安全性。让我解释一下,正如我所看到的:
当您通过用户名和密码对用户进行身份验证时,您将创建与该用户关联的会话 ID。并将其设置为 cookie,每次客户端调用您的服务器时,它都会发送该 cookie,服务器可以在数据库或其他服务器端存储中查找关联用户。
这种方法容易受到 CSRF (Cross Site Request Forgery) 的攻击 为防止 CSRF 您可以使用带有 cookie 的令牌
服务器还需要不断地查找存储,以查看 cookie 指向哪些用户。
当您通过用户名和密码对用户进行身份验证时,您将创建一个签名令牌,在有效负载中包含到期日期、电子邮件地址或用户 ID、角色等。对于安全令牌,应具有较短的到期时间。令牌可以存储在本地存储、会话存储、cookies 的任何地方。我将使用本地存储或会话存储来防止 XSRF。
所以我想使用刷新令牌来防止用户需要不断登录。所以让我们说一下身份验证,我给用户访问令牌和刷新令牌,当用户访问令牌过期时,用户可以使用刷新令牌来获取新的访问令牌,这是我没有得到的。
目前我正在考虑使用:
假设它看起来像这样:
+--------+ +---------------+
| |------------ Authorization Grant --------->| |
| | | |
| |<--------------- Access Token …Run Code Online (Sandbox Code Playgroud) 在 razor 页面中处理 Blazor 时是否有一些特定的代码编写模式?我看到有关 Blazor 的所有示例都将 HTML/Razor/CSS 和 C# 代码放在同一个文件中,例如:
<div class="text">@sometext</div>
<style> .text{ color:black; } </style>
@code{
sometext = "text.."
}
Run Code Online (Sandbox Code Playgroud)
是否有某种模式可以像 MVC 一样将 C# 和 HTML 分开?我将@code{}页面的大部分逻辑移至单独的服务类。
我有兴趣听到不同的方法,最佳实践是什么?
我想对各种服务进行 HTTP 调用,POST/GET/DELETE..,并读取响应 JSON 和 XML,如何在服务器端的 C# 中执行此操作?
简而言之:如何从 Asp.Net Core C# 进行 Api 调用。
客户端 Ajax 不起作用,(对于跨域)
我正在创建 ASP.NET Core 3.1 应用程序,使用 SPA 作为前端。所以我决定创建自定义身份验证和授权。因此,我创建了自定义属性来发出和验证 JWT。
可以说它看起来像这样:
[AttributeUsage(AttributeTargets.Method)]
public class AuthLoginAttribute : Attribute, IAuthorizationFilter
{
public async void OnAuthorization(AuthorizationFilterContext filterContext)
{
//Checking Headers..
using (var EF = new DatabaseContext)
{
user = EF.User.Where(p => (p.Email == username)).FirstOrDefault();
}
filterContext.HttpContext.Response.Headers.Add(
"AccessToken",
AccessToken.CreateAccessToken(user));
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,但我的DatabaseContext,看起来像这样:
public class DatabaseContext : DbContext
{
public DbSet<User> User { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL("ConnectionString");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//....
}
}
Run Code Online (Sandbox Code Playgroud)
我想从 Appsettings.json …
attributes dependency-injection entity-framework-core asp.net-core
我知道 HttpOnly 意味着您无法使用 JS 访问它。我在想,也许你看不懂,但你可以寄回去吗?我不知道。
对于同一台服务器的新请求,我想发回那个 cookie。这可以使用 ReactJS 吗?或者也许有一些方法可以绕过它,比如用简单的 HTML 而不是 ReactDOM 打开新窗口?
谢谢你的帮助。