Django Tastypie: How to Authenticate with API Key

11,977

Add the username and api_key parameters to your GET variables. Make sure that you have the

curl http://localhost:8000/api/v1/books/?username=issackelly\&api_key=123456789adfljafal

Make sure to follow the other instructions from teh docs when setting it up:

ApiKeyAuthentication

As an alternative to requiring sensitive data like a password, the ApiKeyAuthentication allows you to collect just username & a machine-generated api key. Tastypie ships with a special Model just for this purpose, so you'll need to ensure tastypie is in INSTALLED_APPS.

Tastypie includes a signal function you can use to auto-create ApiKey objects. Hooking it up looks like:

from django.contrib.auth.models import User
from django.db import models
from tastypie.models import create_api_key

models.signals.post_save.connect(create_api_key, sender=User)
Share:
11,977

Related videos on Youtube

Jason Goldstein
Author by

Jason Goldstein

Experienced Front End and Python/Django Developer, Product Leader and Engineering Manager.

Updated on June 04, 2022

Comments

  • Jason Goldstein
    Jason Goldstein almost 2 years

    I'm making an internal API with TastyPie. I have

    from tastypie.authentication import ApiKeyAuthentication
    class MyResource(ModelResource):
      Meta:
        authentication = ApiKeyAuthentication()
    

    With Auth rules disabled, my API works great. With it on, I get a 401 (UNAUTHORIZED) response no matter what I try.

    I'm sure this is one of those things that's really obvious once you've see it in action, but in the meantime, please advise how to to make the request (a GET).

  • Jason Goldstein
    Jason Goldstein over 12 years
    Perfect. It's always the little things. Thanks.
  • iJK
    iJK almost 12 years
    Your model resource should also allow for filtering on the field username. readthedocs.org/docs/django-tastypie/en/latest/…
  • mab
    mab over 11 years
    Also make sure, that the shell is not interpreting the & of ..&api_key.. as backgrounding the command. Surrounding the URL with "" or escaping & with \& helped for me.
  • megido
    megido over 11 years
    where do I get the APIKey when sending the request to the server??
  • Dor
    Dor about 10 years
    So instead of sending the password, I'll be sending an API key, which allows MITM attackers to do the same things as a password would allow them?
  • Andre Gallo
    Andre Gallo about 10 years
    Two things @Dor. 1) Use SSL. 2) Presumably your API key has different access than your password. Potentially SSL + password access (BasicAuth) is good for many applications. Otherwise consider something like OAuth if third parties are writing applications.
  • Chesco Igual
    Chesco Igual over 9 years
    In this question you will see how to get the ApiKey: stackoverflow.com/questions/25552577/…
  • Radek
    Radek over 7 years
    Actually this: "curl localhost:8000/api/v1/books/?username=issackelly\&api_key=12‌​3456789adfljafal " did not work for me but when I removed the slash after "issackelly" the user "\" it started working.