私は基本認証をDjango
(with でMongo DB
) に実装しましたが、その初心者です。iOS および Android アプリケーションで作成した Web サービスを使用しようとしています。現在、バックエンドは Postman (REST クライアント) で目的の応答を返しますが、iOS アプリ (認証チャレンジを通じて基本的なDjango
認証要求を処理し、舞台裏で動作します) では返しません。Django
iOS側に焦点を当てています)。iOS では、サービスは401
Unauthorized
ステータスと空の応答を返します。また、認証チャレンジ (OS によって自動的に呼び出される) は受信されません。同様に動作するサードパーティのネットワーク ライブラリも試してみました。これはすべて、何か問題があると私に信じさせますDjango
実装。では、特定の Web サービス ( だけでなく を使用して構築されDjango
たもの) が基本認証プロトコルに従って機能するかどうかを確認するにはどうすればよいでしょうか? ヒントとコツをください。
認証コードは次のとおりです。
import base64
from tastypie.authentication import Authentication
from .backend import CustomMongoEngineBackend
class MongoBasicAuthentication(Authentication):
"""
Customizing basic authentication to make it compatible with mongo
"""
def is_authenticated(self, request, **kwargs):
"""
Checks a user's nasic auth credentials against the current Mongo Auth Backend.
"""
if not request.META.get('HTTP_AUTHORIZATION'):
return False
try:
(auth_type, data) = request.META.get('HTTP_AUTHORIZATION').split()
if auth_type.lower() != 'basic':
return False
user_pass = base64.b64decode(data)
except:
return False
bits = user_pass.split(':', 1)
if len(bits) != 2:
return False
backend = CustomMongoEngineBackend()
user = backend.authenticate(email=bits[0], password=bits[1])
if user:
request.user = user
else:
return False
return True
def get_identifier(self, request):
return request.META.get('REMOTE_USER', 'nouser')