针对 Web 的网站身份验证 API

Web site Authentication against Web API

我有以下使用 net core 3 的场景。一个带有登录页面的网站。此登录页面将用户和密码发送到 Web API,如果凭据正确,该 Web API 会使用 JWT 令牌进行响应。

现在如何将我的网络用户设置为已验证?如何使用从 API 令牌收到的声明设置网络用户的声明?

是否需要在启动时添加任何类似的服务?

您能否向我提供有关如何操作的任何基本示例或任何文档?

谢谢

根据您的前端解决方案,您需要弄清楚如何解码收到的 JWT 以检索所需的值。

这里有几件事,同样取决于您在前端使用的是什么

C# https://developer.okta.com/blog/2019/06/26/decode-jwt-in-csharp-for-authorization

SPA 的 NPM 包 https://www.npmjs.com/package/jwt-decode

这是 JWT 的另一个好资源 https://jwt.io/

您可以拿着收到的 JWT 查看里面的值

您可以使用 cookie authentication :

  1. Startup.ConfigureServices方法中,使用AddAuthenticationAddCookie方法创建身份验证中间件服务:

    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                options.LoginPath = "/Account/Login";
            });
    

    并在Configure中启用中间件:

    app.UseAuthentication();
    app.UseAuthorization();
    
  2. 并且在用户post凭据到的操作中,您可以使用凭据向网络api发送http请求,网络api将验证凭据和 return 返回 jwt 令牌,然后您的 Web 应用程序解码令牌并登录用户,例如:

    var stream = "[token]";
    var handler = new JwtSecurityTokenHandler();
    
    var tokenS = handler.ReadToken(stream) as JwtSecurityToken;
    
    
    var claimsIdentity = new ClaimsIdentity(
        tokenS.Claims, CookieAuthenticationDefaults.AuthenticationScheme);
    
    var authProperties = new AuthenticationProperties
    {
    
        RedirectUri = "/Home/Privacy",
    
    };
    
    await HttpContext.SignInAsync(
        CookieAuthenticationDefaults.AuthenticationScheme,
        new ClaimsPrincipal(claimsIdentity),
        authProperties);