Pla*_*ure 6 api django django-authentication tastypie
我正在设计一个网站,其中人们将以用户身份登录,并且可能分为多个组,这些组有几种不同的类型.我想要一个人们可以直接使用的网站,以及公开可以被其他网站使用的API.
实现登录系统的最佳方式是什么,该登录系统既适用于网站本身的常规用户,也允许API消费网站代表用户无缝创建帐户,并允许用户查看我的数据网站和API消费网站?
我正在使用Django 1.5,所以我愿意自定义用户模型和所有这些.API将使用Tastypie提供.
编辑:老实说,我的主要问题是我不太了解API密钥何时有用以及它们如何与常规用户登录共存(如果有).
dno*_*zay 11
API密钥的第一个和用例是自动化.您提供api key
(或通常称为token
)第三方,瞧,您可以让第三方为您做的事情.当您不再信任第三方时,您可以撤消api key
或重新生成它.Api密钥允许用户通过传统认证(例如username/password
)请求令牌来启动和认证动作链,然后用户将其传递给感兴趣的各方.最后看看我关于电话号码的小故事.
因为您不想在其他网站上危害您的用户,并让他们在那里键入密码以便使用您的API.如果第三方遭到入侵,则用户的通信或密码将受到损害.
这是很好的资源:
这是一个很好的起点:
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)
Run Code Online (Sandbox Code Playgroud)
由于post_save
信号,这应该照顾创建api键.第二部分是允许多个身份验证方案适合您的用例,所以......上MultiAuthentication
:
from django.contrib.auth.models import User
from tastypie.authentication import BasicAuthentication, ApiKeyAuthentication, MultiAuthentication
from tastypie.authorization import DjangoAuthorization
from tastypie.resources import ModelResource
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'auth/user'
excludes = ['email', 'password', 'is_superuser']
authentication = MultiAuthentication(BasicAuthentication(), ApiKeyAuthentication())
authorization = DjangoAuthorization()
Run Code Online (Sandbox Code Playgroud)
这些是从不泄漏网络上的敏感数据的好习惯:
ssl
或tls
.ssl
或不使用http基本身份验证tls
.permissions
.cache-control
标题正确我使用gmail,所以这里有一个来自https://security.google.com/settings/security(审核权限)的示例,我可以看到如何使用google openid:
为什么要为每个第三方使用一个api密钥?是否应该允许用户拥有多个api密钥并将其标记为特定用途?.
答案是,如果api key
您分享的内容与您的相同phone number
,但您不需要向所有朋友提供相同的电话号码(谷歌语音FTW!).
如果你的朋友行为不端并把它交给了一大堆销售代表,你会非常生气.如果您的手机是相同的,那么拥有它的人可能会在不知情的情况下与其他人分享.最终结果,所有销售代表都知道你的号码...不太好.但你仍然希望你妈妈能打电话给你,对吗?所以你不能真正改变你的号码.现在想象一个更危险的情况; 你在当地比萨店有一个标签,他们通过姓名/电话号码了解你.如果有人拿到你的api密钥,他们可能冒充你订购披萨并仍然向你收费(你有一个标签!).
如果您有100个号码给100个不同的朋友,他们不仅可以与您联系,而且如果销售代表给您打电话给您,您会知道您的哪位朋友给了它,您可以只删一个号码.妈妈现在开心了,因为她可以告诉你去哪儿吃早午餐.你的朋友现在决定订购披萨......你现在可以追踪到你的朋友(或者你应该给比萨店提供一个你朋友都不知道的数字).