.Net Core 身份验证和用户会话

约翰·梅尼金

我是 .Net Core(目前使用 .Net Core 2.2)授权和身份验证的新手。我必须在我的新项目中开发身份验证和授权机制。在网上搜索我发现了几种方法(使用身份、不使用、使用 Cookie、使用 JWT 等)。我希望有人为我指出一个非常适合我的场景的方向。以下是要求:

  • 我正在将应用程序开发为 API。所以我需要保护我的端点。
  • 身份验证将由我的客户提供的第三部分系统完成。基本上,在我的Login端点收到用户和密码后,我将不得不请求此服务。然后,该服务将告诉我用户及其角色是否已通过身份验证。
  • 通过身份验证,然后我将查询我自己的数据库以获取有关用户的信息:它的时区、语言等。我希望在会话中包含此信息,以便该用户到达我的服务器的每个请求,我都会获取语言,例如,为了以正确的语言返回数据。
  • 该应用程序将部署在具有负载平衡的两个不同服务器中。登录一台服务器的用户应该在另一台服务器上有效(服务器必须以某种方式共享 cookie/令牌)。

我对这里的很多东西都不熟悉。我不知道是否可以在服务器之间共享 cookie 身份验证,还是应该使用 JWT 并将其保存在数据库中……?另外,Session 在 .Net core 中是如何工作的?我可以以某种方式将会话绑定到 JWT 或类似的东西吗?

哪种方法是最好的/推荐的方法?

非常感谢任何帮助/教程。

谢谢!

内维尔·纳泽兰

只是一些概念:

Identity是一个用于帮助设置和管理用户群(如注册、验证密码、密码重置等)的库。它管理存储、安全性和许多必需的验证。这部分似乎由您的客户管理。所以你不需要这个。

Web 应用程序通常使用Cookie/会话来跟踪当前用户信息。虽然可以将这些与 Web API 一起使用,但实际上不推荐也不这样做。

JWT用于无状态设置。Web API 大多是无状态的(REST)。这意味着最小使用量或 RAM 而不是使用 RAM 或数据库来跟踪状态(以了解先前的请求是否与当前相关)。获取您的用户数据的 JWT,使用您可以提供秘密字符串进行签名并创建签名您可以在https://jwt.io等网站上在线阅读有关 JWT 的更多信息

您的第一阶段是连接到客户端的系统进行身份验证。由于您打算连接到服务器端的另一个 API,您需要使用 .NET Core 的AddHttpClient功能。首先,创建一个这样的类:

public class MyAuthClient
{
    private readonly HttpClient httpClient;

    public MyAuthClient(HttpClient httpClient)
    {
        this.httpClient = httpClient;
    }

    public Dictionary<string, string> AuthorizeUser(string username, string password)
    {
        // use the httpClient send login and get confirmation from client's system
        if (loginFailed) return null;
        else
        {
            var result = new Dictionary<string, string>();
            result["userData1"] = "value"; // get these values from the http request you have created above.
        }
    }

}

在您的启动中添加以下内容:

services.AddHttpClient<MyAuthClient>(client => {
    client.BaseAddress = new Uri("https://yourclientsystem.com");
});

现在,要设置 JWT 身份验证,您可以在网上找到多种方法。我已经建立了一个名为的库NetCore.Jwt,它在这种情况下可能非常有用。如果您不习惯使用它,您可以提取其源代码或在线使用替代品。完成后,在您的 startup.cs 文件中:

ConfigureServices函数中使用以下内容

services.AddAuthentication(NetCoreJwtDefaults.SchemeName).AddNetCoreJwt(options => 
{
    options.Secret = "yourVerySecretKeyThatYouWillBeSharingBetweenBothServers";
   // you can configure other options here too
});

以及Configure函数中的以下内容

app.UseAuthentication();

上面的代码使用 JWT 为您的应用程序配置身份验证。确保Secret两个应用程序中字符串相同将有助于确保您在两个应用程序之间共享相同的登录信息。在代码中硬编码这样的字符串是不安全的。检查此链接以了解如何以安全格式存储内容。现在,您将需要一个控制器和操作,您可以在其中获取用户登录信息并提供有效的 JWT。这将是这样设置的:

public class AuthController : Controller
{
    private readonly MyAuthClient authClient;

    public AuthController(MyAuthClient authClient)
    {
        this.authClient = authClient;
    }

    public ActionResult<string> Login(string userName, string password)
    {
        var result = authClient.AuthorizeUser(userName, password);
        if (result == null) return BadRequest("invalid login");
        var claims = new List<Claim>();
        foreach (var r in result)
        {
            claims.Add(new Claim(r.Key, r.Value));
        }
        claims.Add(new Claim(ClaimTypes.Name, "usernameHere")); // this can be later accessed using User.Identity.Name
        claims.Add(new Claim(ClaimTypes.NameIdentifier, "userId"));
        string token = HttpContext.GenerateBearerToken(claims);
        return token;
    }

}

最后,要使您的 API 只能被授权和使用,请确保您包含[Authorize]在每个控制器之上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

.NET Core 3.1和Windows身份验证会杀死会话变量

来自分类Dev

.NET Core令牌身份验证-主体

来自分类Dev

.Net Core HttpClient摘要身份验证

来自分类Dev

返回时,ASP .NET Core Cookie身份验证过期从时间戳更改为“会话”

来自分类Dev

会话超时asp.net和身份验证

来自分类Dev

如何从Linux上运行的.NET Core应用程序对Windows域用户进行身份验证

来自分类Dev

在ASP.NET Core 3.0中如何获取当前经过身份验证的用户名?

来自分类Dev

如何检查用户是否在ASP.NET Core中已通过身份验证

来自分类常见问题

.NET Core身份服务器4身份验证VS身份身份验证

来自分类Dev

.NET Core中可以通过用户名和签名进行身份验证的Microsoft.Web.Services3的替代品是什么?

来自分类Dev

5.7.0用户未通过mailkit和strato服务器在asp.net core1中进行身份验证

来自分类Dev

在ASP.NET Core中使用Authorize属性和自定义Cookie身份验证

来自分类Dev

IIS 8中的.Net Core和Windows身份验证失败

来自分类Dev

.NET Core Web Api Azure AD和Swagger不进行身份验证

来自分类Dev

Angular2前端和.NET Core后端身份验证/帐户系统

来自分类Dev

如何使用 Identity & Entity Framework 在 .NET Core 2.0 中管理身份验证和授权

来自分类Dev

Web 应用程序和 API AzureAD 身份验证流程 ASP.NET Core

来自分类Dev

使用 Asp.net Core 2.1 和 Identity Server 4 的身份验证/授权

来自分类Dev

ASP.NET CORE 中的自定义身份验证和更新声明

来自分类Dev

在.Net Core 3.0项目中正确设置ASP.Net Core授权和身份验证

来自分类Dev

Phonegap和ASP.NET WebAPI用户身份验证

来自分类Dev

Phonegap和ASP.NET WebAPI用户身份验证

来自分类Dev

ASP.NET Core中的承载令牌身份验证

来自分类Dev

ASP.NET Core中的基本身份验证

来自分类Dev

ASP.Net Core SAML身份验证

来自分类Dev

.NET Core在AzuerAD身份验证后添加声明

来自分类Dev

.NET Core 3.1 WebApi项目+ NTLM身份验证

来自分类Dev

.NET Core API中的Windows身份验证自动登录

来自分类Dev

什么是ASP.NET Core的Microsoft身份验证方案?

Related 相关文章

  1. 1

    .NET Core 3.1和Windows身份验证会杀死会话变量

  2. 2

    .NET Core令牌身份验证-主体

  3. 3

    .Net Core HttpClient摘要身份验证

  4. 4

    返回时,ASP .NET Core Cookie身份验证过期从时间戳更改为“会话”

  5. 5

    会话超时asp.net和身份验证

  6. 6

    如何从Linux上运行的.NET Core应用程序对Windows域用户进行身份验证

  7. 7

    在ASP.NET Core 3.0中如何获取当前经过身份验证的用户名?

  8. 8

    如何检查用户是否在ASP.NET Core中已通过身份验证

  9. 9

    .NET Core身份服务器4身份验证VS身份身份验证

  10. 10

    .NET Core中可以通过用户名和签名进行身份验证的Microsoft.Web.Services3的替代品是什么?

  11. 11

    5.7.0用户未通过mailkit和strato服务器在asp.net core1中进行身份验证

  12. 12

    在ASP.NET Core中使用Authorize属性和自定义Cookie身份验证

  13. 13

    IIS 8中的.Net Core和Windows身份验证失败

  14. 14

    .NET Core Web Api Azure AD和Swagger不进行身份验证

  15. 15

    Angular2前端和.NET Core后端身份验证/帐户系统

  16. 16

    如何使用 Identity & Entity Framework 在 .NET Core 2.0 中管理身份验证和授权

  17. 17

    Web 应用程序和 API AzureAD 身份验证流程 ASP.NET Core

  18. 18

    使用 Asp.net Core 2.1 和 Identity Server 4 的身份验证/授权

  19. 19

    ASP.NET CORE 中的自定义身份验证和更新声明

  20. 20

    在.Net Core 3.0项目中正确设置ASP.Net Core授权和身份验证

  21. 21

    Phonegap和ASP.NET WebAPI用户身份验证

  22. 22

    Phonegap和ASP.NET WebAPI用户身份验证

  23. 23

    ASP.NET Core中的承载令牌身份验证

  24. 24

    ASP.NET Core中的基本身份验证

  25. 25

    ASP.Net Core SAML身份验证

  26. 26

    .NET Core在AzuerAD身份验证后添加声明

  27. 27

    .NET Core 3.1 WebApi项目+ NTLM身份验证

  28. 28

    .NET Core API中的Windows身份验证自动登录

  29. 29

    什么是ASP.NET Core的Microsoft身份验证方案?

热门标签

归档