Thr*_*oze 6 authentication django restful-authentication
我正在为我的公司开发一个具有以下架构的解决方案:基于django构建的RESTfull Web服务,它为Web客户端应用程序和移动客户端应用程序(使用phonegap编写)提供身份验证和持久层.
我们在互联网上一直在寻找关于客户端身份验证方法的很多内容,为Web和移动客户端应用程序提供支持,从我们发现的(非常差)我们考虑为每个用户生成API密钥从移动客户端应用程序登录,并将此API密钥保存在设备的本地存储中; 并且,在Web客户端中,使用传统的cookie会话管理,包括POST,PUT和DELETE请求中的CSRF令牌.
我们想知道认证方法的最佳实践是什么,这种方法是否足够好?有没有其他方法来处理身份验证?哪一个是最好的?
我们试图使用oAuth无效,因为它增加了我们开发的复杂性.
我们已经检查了这个问题,但它的答案对我们没有多大帮助,因为我们正在使用phonegap,并且具有上述架构.
谢谢你的帮助!
如果您真的真的想创建自己的解决方案。这是我在 oAuth 时代之前的旧解决方案。
检查请求中的密钥=>数据库中是否存在=>登录
#pseudo code
#view
from django.contrib.auth import authenticate, login
def get_my_token(request, username, password):
user = authenticate(username, password)
if user is not None:
login(request,user)
#first should check has access_key
try:
return UserAuth.objects.filter(user=user).access_key
except:
pass
access_key = 'somecrazy_random_unique_number'
user_auth = UserAuth()
user_auth.user = user
user_auth.access_key = access_key
user_auth.save()
return access_key
Run Code Online (Sandbox Code Playgroud)现在,您可以将 access_key 保存在某处,并将标题“access_key_or_any_other_name”添加到对其余资源的每次调用中。创建身份验证中间件,而不是身份验证后端。
#auth_middelware
class StupidNoAuthMid(object):
def process_request(self, request):
access_key = reuest.META['access_key_or_any_other_name']:
try:
user = UserAuth.objects.filter(access_key=acces_key).user
auth.login(request, user)
except:
pass
Run Code Online (Sandbox Code Playgroud)
你不想重新发明轮子。使用oAauth,您可以保存access_token以供将来使用。
归档时间: |
|
查看次数: |
3221 次 |
最近记录: |