Giter Site home page Giter Site logo

Add "remember me" functionality about aura.auth HOT 12 OPEN

auraphp avatar auraphp commented on August 15, 2024 1
Add "remember me" functionality

from aura.auth.

Comments (12)

paragonie-scott avatar paragonie-scott commented on August 15, 2024 1

Hello,

The Resonant Core website is now defunct. However, the same advice is alive and well here: https://paragonie.com/blog/2015/04/secure-authentication-php-with-long-term-persistence#title.2

Regards,
Scott

from aura.auth.

harikt avatar harikt commented on August 15, 2024

Yes this is really an interesting functionality. Also deals with security.

from aura.auth.

pmjones avatar pmjones commented on August 15, 2024

Yeah, and thinking about it makes me re-think some of this very early work (only a few days old!).

from aura.auth.

enygma avatar enygma commented on August 15, 2024

Isn't "remember me" just basically an extension of the length of the session? Shouldn't the auth/session handler just be able to set a time far out in the future when "remember me" is enabled?

from aura.auth.

pmjones avatar pmjones commented on August 15, 2024

No, there's something about setting a special cookie that can re-enable a session without actually logging in. However, the safest variations of these compare the cookie value with a value stored elsewhere.

from aura.auth.

enygma avatar enygma commented on August 15, 2024

Yeah, it'd almost have to be some kind of adapter behind it for the storage, similar to how the other adapters are used (defaulting to PDO I imagine).

from aura.auth.

harikt avatar harikt commented on August 15, 2024

Yes, session timeout is different. As @pmjones mentioned, you need some special cookie value stored, and recheck that on next login. On every new login we should reset the cookie with a different value.

Recently I was able to implement something for processwire. Somethings we need to do are

  1. If the user is logged in via remember me, don't let them reset the password and don't give some sort of administrative privileges.
  2. Reset hash on every request.
  3. Good to keep a hash in db rather than the same value stored in cookie.
  4. Need to limit the amount of login request

from aura.auth.

harikt avatar harikt commented on August 15, 2024

Hi Paul,

I wonder when creating a remember me cookie we are trying to duplicate some of the code of Aura.Session . Else we may need to use the same function session_set_cookie_params to increase the cookie time.

$session->setCookieParams(array('lifetime' => '3600'));

The more I am thinking, I have a feeling we should add aura/session as a dependency to Aura.Auth for easy usage. I am not caring how others think about Auth. But the ease of use should be thought than splitting more.

Or we may need to define a shared interface, and don't implement the functionality but suggest to use the aura/session which is already implemented to work for it.

Thanks!

from aura.auth.

enygma avatar enygma commented on August 15, 2024

I think, if anything, the "remember me" functionality should allow for different storage methods with Aura.Session being the default. I know the project is all about reducing dependencies, but in this case I think it's necessary from a DRY perspective.

from aura.auth.

jleckie avatar jleckie commented on August 15, 2024

I just implemented something like this it basically worked like this...

  • Create cookie with randomly generated key with extended lifetime (leaving php session cookie alone, with standard lifetime)
  • On return to site if session has expired cookie key was looked up in redis storage. The redis storage would return a user identifier which is then used to create a new session for that user.
  • Logout of course destroys both the session and the remember me cookie

Few notes, storage is the key part here as you need to secure this part. So memcached, redis, db or file storage should all be options. Any key value store really. Any access to this data will mean complete site compromise. So encryption layer might be useful.

The cookie can easily be stolen, ways to reduce damage include regenerating the cookie key everytime the session expires. Ensuring the cookie is httponly and https. Useragent checking to ensure useragent has not changed (may not always be reliable, upgrades etc).

from aura.auth.

harikt avatar harikt commented on August 15, 2024

great points @jleckie .

from aura.auth.

pmjones avatar pmjones commented on August 15, 2024

For future reference: https://resonantcore.net/blog/2015/02/remember-me-safely-secure-long-term-authentication-strategies

from aura.auth.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.