Thanks Tom for the reply.
I understand your reply and reasoning. I haven't checked other major web sites to see what they do, but for Ajax-driven API's, it's important to distinguish between the unauthorized and forbidden. For example, if a user is logged into a protected web site which uses Ajax, and they leave the web page open for a log time, then I want future activity to return 401. Then my client script code can easily catch an 401's and redirect the parent web page to a login page. 403 would not do that; it would just fail.
I created a custom authenticator like this to basically do what I want:
class SessionAuthentication(authentication.SessionAuthentication):
def authenticate_header(self, request):
return 'session'