← l-artikli kollha

.NET

JWT u Microsoft Identity: Kif Nifhem id-Differenza

Bqajt nittratta JWT u Microsoft Identity bħala għażliet li jikkompetu. Mhumiex. Waħda hija l-ticket booth li tikkonferma min int, l-oħra hija l-wristband li turi dan f'kull ride wara dak.

JWT u Microsoft Identity: Kif Nifhem id-Differenza

Bqajt nittratta JWT u Microsoft Identity bħallikieku kienu għażliet li jikkompetu, bħallikieku l-mistoqsija kienet "għandi nuża Identity jew għandi nuża JWT." Dik hija l-mistoqsija l-ħażina. Jagħmlu xogħlijiet differenti, u fil-biċċa l-kbira tal-APIs li nibni, jaħdmu flimkien minflok kontra xulxin.

Il-verżjoni tal-park tad-divertiment

Il-mod li dan finalment għamel sens għalija: aħseb dwar li tibni sistema għal park ta' divertiment.

Microsoft Identity hija d-database u t-ticket booth. Tittratta min int u x'fih il-kont tiegħek, it-tabelli għall-utenti, passwords hashed, rwoli, u claims. Hija l-biċċa li twieġeb "irreġistra utent ġdid," "iċċekkja jekk din il-password hix korretta," jew "illokkja l-kont wara ħames tentattivi ta' login falluti."

JWT huwa l-wristband. Huwa sempliċiment format għal badge iffirmat. Ladarba t-ticket booth jivverifika min int, jistampa wristband iffirmat kriptografikament, l-istring JWT, u jgħaddihulek. Tilbes dak il-wristband f'kull ride wara dak. L-operatur tar-ride ma jsejjaħx it-ticket booth kull darba, sempliċiment jiċċekkja li l-wristband għandha firma valida u jħallik tgħaddi.

X'jimmappja dan fil-kodiċi

Talba ta' login tmur għand Identity l-ewwel. Issib l-utent, tivverifika l-hash tal-password, u biss imbagħad jinħoloq it-token:

[HttpPost("login")]
public async Task<IActionResult> Login(LoginRequest request)
{
    // Microsoft Identity: the ticket booth
    var user = await _userManager.FindByEmailAsync(request.Email);

    if (user is null || !await _userManager.CheckPasswordAsync(user, request.Password))
    {
        return Unauthorized();
    }

    // JWT: the wristband
    var token = _tokenService.CreateToken(user);
    return Ok(new { accessToken = token });
}

_userManager huwa Identity, jitkellem mad-database. _tokenService sempliċiment jippakkja l-claims li Identity diġà kkonferma u jiffirmahom.

Dak it-token jerġa' lura għall-klijent, u kull talba wara dak iġġorrha fil-header Authorization minflok l-username u l-password. Il-middleware li jiċċekkjaha qatt ma jmiss Identity xejn:

builder.Services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(key),
            ValidateLifetime = true
        };
    });

Firma u skadenza, dak hu. L-ebda sejħa għad-database f'kull talba li ssegwi.

Minn fejn ġejja l-konfużjoni

Naħseb ħlittihom flimkien għax it-tnejn it-termini jidhru fl-istess konversazzjonijiet ta' awtentikazzjoni, għalhekk huwa faċli tassumi li huma żewġ għażliet għall-istess problema. Ladarba rajthom bħala żewġ saffi differenti minflok, it-ticket booth jikkonferma min int, u l-wristband turi dan f'kull ride wara dak, il-konfużjoni ċċarat.