Toon posts:

[ASP.NET Identity 2] Hoe custom authenticatie-cookies zetten

Pagina: 1
Acties:

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 25-03 15:52
Ik werk aan een custom implementatie van ASP.NET Identity 2.0 die werkt met ons eigen datamodel, een ander ORM, maar ook met andere business logic. Standaard is het zo dat je inlogt, er een ApplicationCookie wordt geset, waarna de standaard AuthorizeAttribute deze herkent en je inlogt. In onze eigen implementatie wil ik deze implementatie echter flink oprekken.

De bedoeling is dat je op allerlei manieren in kunt loggen, bijvoorbeeld:
  • Impersonation
  • Password reset token
  • Google Authenticator (two-factor)
  • Username + password
  • SMS (two-factor)
  • Etc.
In alle gevallen moet de gebruiker ingelogd worden, maar welke acties uitgevoerd mogen worden hangt af van de manier waarop je ingelogd bent. Zo ben je met 'Password reset token' weliswaar ingelogd, maar heb je alleen permissie om je wachtwoord aan te passen. Met 'Username + password' mag je bijna alles doen, behalve de dingen waarvoor je bijvoorbeeld weer two-factor nodig hebt (SMS of Google authenticator). Om dit te bereiken wil ik in mijn custom AuthorizeAttribute kijken welke cookie er geset is, en aan de hand daarvan wel of geen permissie geven.

Het probleem is bijvoorbeeld dat er bij SMS welliswaar een 'TwoFactorCookie' wordt gezet, maar deze wordt niet herkend als valide inlogmethode. Zo is HttpContext.Current.Identity null. Alleen een ApplicationCookie resulteert in een log in.

Waar ik momenteel mee worstel:
  1. Is het de bedoeling dat ik altijd ApplicationCookie gebruik om de gebruiker in te loggen en op een andere manier (bijvoorbeeld via Claims) het onderscheid maak qua inlogmethode, zodat er altijd maar één cookie is? Of is het handiger toch aparte cookies te gebruiken per inlogmethode? Zo ja, hoe zorg ik er voor dat 'XYZCookie' ook resulteert in een ingelogde gebruiker?
  2. Valt samen met punt 1: is het de bedoeling dat ik custom authentication middleware schrijf voor mijn andere inlogmethodes of kan ik gewoon de standaard CookieAuthenticationMiddleware daarvoor gebruiken? Het enige dat er moet gebeuren is dat er een cookie geset wordt, en aangeduid wordt op welke manier de user is ingelogd.

[Voor 5% gewijzigd door Avalaxy op 30-10-2014 17:21]


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16:06
Moet je niet claims gaan gebruiken? In de claim geef je aan hoe de gebruiker is ingelogd. Claims zijn ideaal om meta data bij te houden.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 25-03 15:52
Dat is inderdaad een van de opties die ik overweeg. Maar wat is het nu dan van TwoFactorCookie en ExternalCookie? Wat doen die?

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 12:21
Ik zou wat Sebazzz ook al aangeeft Claims gebruiken.

De cookies worden gebruikt om tijdelijk informatie op te slaan ter ondersteuning van het Two-factor authenticatie verhaal. Voornamelijk als je via een 3rd party gaat inloggen. Maar hoe het precies in het Two-Factor verhaal past ben ik ook nog niet achter.
Lastig om concreet wat over te vinden.

[Voor 139% gewijzigd door D-Raven op 31-10-2014 13:18]


  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 25-03 15:52
Op StackOverflow heb ik een reactie van iemand die in het Identity team werkt van microsoft. Hij schreef:
So each instance of a CookieMiddleware basically represents one auth cookie, if you want multiple cookies, you can add more than one CookieMiddleware and to retrieve the ClaimsIdentity mapping to your cookie, you just need to call Authenticate on the AuthenticationManager passing in the AuthenticationType for the cookie you want.
Ik heb nu dus een aantal extensions gemaakt, die er bijvoorbeeld zo uitzien:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void UseSmsSignInCookie(this IAppBuilder app, TimeSpan expires)
{
    if (app == null)
        throw new ArgumentNullException("app");

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = ApplicationAuthenticationTypes.Sms,
        AuthenticationMode = AuthenticationMode.Passive,
        CookieName = CookiePrefix + ApplicationAuthenticationTypes.Sms,
        ExpireTimeSpan = expires,
    });
}


Vervolgens log ik de user in door AuthenticationManager.SignIn aan te roepen met een custom ClaimsIdentity (die dus mijn eigen authentication type mee krijgt). Echter is na het aanroepen van SignIn het resultaat van HttpContext.Current.User.Identity.AuthenticationType nog steeds ApplicationCookie. De cookie is wel gezet zoals het hoort.

Iemand enig idee wat ik mis?

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 25-03 15:52
Iemand?

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 12:21
Je zou kunnen proberen om hier wat vragen te stellen. Via de Discussions.

https://aspnetidentity.co...ol/latest#Readme.markdown

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 25-03 15:52
Thanks, gedaan.

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 25-03 15:52
Nog nergens een reactie :{

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16:06
Heb je het al geprobeerd met claims in plaats van vijf cookies? :)

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 12:21
Sebazzz schreef op donderdag 06 november 2014 @ 22:40:
Heb je het al geprobeerd met claims in plaats van vijf cookies? :)
Dat is niet wat zijn probleem oplost. HIj wil dat het type van zijn Security Identity mee veranderd met de methode van login.
Naar aanleiding van documentatie e.d. zou je er vanuit kunnen gaan dat dit zou moeten werken, aangezien zo'n beetje alles om zelf iets te implementeren wel aanwezig is.
Het is alleen ontzettend lastig om fatsoenlijke documentatie hierover te vinden.

  • Avalaxy
  • Registratie: Juni 2006
  • Laatst online: 25-03 15:52
Uiteindelijk maar gekozen voor de claimsmanier, maar iemand een oplossing voor dit probleem? \[ASP.NET Identity] HttpContext.Current is null
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee