JWTCookieAuthentication
Beskrivelse av JWTCookieAuthentication.
JWTCookieAuthentication er en ASP.NET Core-autentiseringstjeneste laget for å støtte JSON Web Tokens (JWT) både som bearer-tokens og som JWT i informasjonskapsler. Løsningen bygger på JWTBearer.
Tjenesten er laget for scenarier der API-er må være tilgjengelige både fra systemer som bruker bearer-token og fra enkelt-sides applikasjoner (SPA), hvor man ønsker å beskytte JWT mot tilgang fra selve SPA-en (XSS-angrep). Når JWT lagres i en HTTP-only-informasjonskapsel, er den ikke tilgjengelig fra SPA-en og kan ikke stjeles av ondsinnet JavaScript i nettleseren.
Løsningen er laget som et separat C#-prosjekt og publisert som NuGet-pakken JWTCookieAuthentication.
Funksjoner for konsument
- Støtte for verifisering av JWT som bearer-token
- Støtte for verifisering av JWT fra informasjonskapsel
- Konfigurerbart navn på informasjonskapselen
- Automatisk deteksjon av om forespørselen inneholder Authorization-bearer eller JWT i informasjonskapsel
- Bruker Microsoft.IdentityModel.Tokens til verifisering og generering
- Bruker OpenID Connect well-known-endepunkt for å hente JSON Web Key (JWK) fra JSON Web Key Set
- Støtte for flere konfigurerte OIDC-leverandører
- Støtte for rotering av JWK (TODO)
Funksjoner for ID-leverandør
- Støtte for generering av JWT som bearer-token
- Støtte for generering av JWT i informasjonskapsler
- Konfigurerbart navn på informasjonskapselen
- Konfigurerbart signeringssertifikat
- Bruker standard JWT-bibliotek for verifisering og generering
- Bruker OpenID Connect well-known-endepunkt for å hente JSON Web Key (JWK) fra JSON Web Key Set
- Støtte for rotering av JWK (TODO)
Konfigurering av JWTCookieAuthentication
Konfigurasjon for konsumenter
// Configure Authentication
// Use [Authorize] to require login on MVC Controller Actions
services.AddAuthentication(JwtCookieDefaults.AuthenticationScheme)
.AddJwtCookie(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
ValidateIssuer = false,
ValidateAudience = false,
RequireExpirationTime = true,
ValidateLifetime = true
};
options.Cookie.Domain = Configuration["GeneralSettings:HostName"];
options.Cookie.Name = Services.Constants.General.RuntimeCookieName;
options.MetadataAddress = Configuration["AppSettings:OpenIdWellKnownEndpoint"];
if (_env.IsDevelopment())
{
options.RequireHttpsMetadata = false;
}
});
Konfigurasjon for identitetsleverandør
Konfigurasjonen under er relevant for applikasjonen som fungerer som ID-leverandør.
// Use [Authorize] to require login on MVC Controller Actions
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddJwtCookie(JwtCookieDefaults.AuthenticationScheme, options =>
{
options.ExpireTimeSpan = new TimeSpan(0, 30, 0);
options.Cookie.Name = Common.Constants.General.RuntimeCookieName;
})
Hvordan hente brukerinformasjon
Når en applikasjon er konfigurert med JWTCookie-autentisering, er brukerinformasjonen tilgjengelig i HttpContext.
public static int GetUserId(HttpContext context)
{
int userId = 0;
if (context.User != null)
{
foreach (Claim claim in context.User.Claims)
{
if (claim.Type.Equals(AltinnCoreClaimTypes.UserId))
{
userId = Convert.ToInt32(claim.Value);
}
}
}
return userId;
}