The session cookie ?

Or you could use another decorator or a middle-ware doing
authentication based on the ip and some information passed as get
argument. Like a token returned by django when you auth the user.

The request hit the new decorator, the decorator notice the user isn't
logged in and that it provide a token. It check if the token match a
recently logged in user and its ip and maybe the user-agent. If that's
the case, log the user in and let the request hit the @login_required
decorator.

If you don't simply reuse the session cookie, I would spend some time,
listening with wireshark and messing with a browser, checking that I
am not opening a hole.

2016-08-01 21:39 GMT+02:00 Larry Martell <[email protected]>:
> On Mon, Aug 1, 2016 at 3:03 PM, James Schneider <[email protected]>
> wrote:
>>
>>
>> On Mon, Aug 1, 2016 at 11:33 AM, Michal Petrucha
>> <[email protected]> wrote:
>>>
>>> On Mon, Aug 01, 2016 at 12:17:38PM -0400, Larry Martell wrote:
>>> > I have a view that is accessed both from the browser and from a
>>> > non-browser app. The request from the non browser app come from a
>>> > remote app where the user has already had to login (or they would
>>> > never get to the point where they could cause the request to be sent).
>>> > Is there a way to make login required when the request comes from a
>>> > browser but then not have login required when the request comes from
>>> > the app?
>>>
>>> That sounds like a bad idea. Even with the “app”, when a request is
>>
>>
>> +100
>>
>>
>>> being made, the user has to be authenticated somehow. If you allow
>>> your “app” to access the view without authentication (regardless of
>>> what criterion you pick to determine it is the “app”, be it the
>>> user-agent, referrer, or whatnot), what's to prevent a motivated
>>> attacker from finding the criterion out using a sniffing proxy or some
>>> other tool, and just making the request directly?
>>>
>>
>> +100
>>
>> Your end-users (regular browser sessions) and apps using API calls should
>> probably be using a separate URL structure. In most cases the API calls
>> have
>> a unique identifier in the path such as being prepended with '/api/' and
>> are
>> often followed by a version number ('/api/v1/') to maintain compatibility
>> with concurrent API versions.
>>
>> While it is a terrible idea to have an authenticated and non-authenticated
>> URL for the same resource (or set of resources), you can easily achieve
>> this
>> by having separate URL's for your browser sessions vs. API calls, and
>> performing the login decoration on the browser URL in the urls.py file
>> rather than decorating the view directly. The URL for the API call would
>> not
>> be decorated and can be accessed without requiring a login, but both URL's
>> would point at the same view.
>>
>> My advice is not to do that, though.
>>
>> You should heavily consider either having your app be authenticated (login
>> and grab a session token via your API), or provide an API token to the
>> local
>> app that is associated with the user you want. The latter will require
>> some
>> extra infrastructure.
>>
>> The alternative is to not have the user log in no matter how they are
>> accessing the URL. If it works without logging in, and there are no
>> resources to protect, that sounds like the way to go. With the
>> implementation you've indicated, you'll be asking for trouble
>> operationally
>> later when your view is expecting a user object, but it doesn't get one.
>> Means more complexity for no appreciable gain.
>>
>> You can also implement some sort of SSO implementation (Shibboleth, CAS,
>> OAuth, etc.) that can be used by both regular browser sessions and your
>> custom application.
>
> I understand and know all that. The situation is that they have an existing
> django app. Nothing in the app can be accessed without logging in. Then they
> have an in house developed non browser client app and they want to access
> some of the functionality from the django app in the other app. When the
> other app comes up they do have to logi in and I do use the django auth
> system for that. But when a request comes in from the app there is nothing
> to tie it back to the previously authorized session. Is there something from
> the initial auth I can use to get past the @login_required decorator on the
> views?
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CACwCsY4rN4i_bruDHnt24BNJNGFLCCBRH-N2uvn4ap%3DOUCqx2A%40mail.gmail.com.
>
> For more options, visit https://groups.google.com/d/optout.



-- 

Cordialement, Coues Ludovic
+336 148 743 42

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAEuG%2BTbEtZ17sYPWM2683aLC5%3DVV%2BVxCGvCbTr-F0gFV-32N-g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to