【问题标题】:Django authentication from iOS client来自 iOS 客户端的 Django 身份验证
【发布时间】:2014-05-09 08:45:26
【问题描述】:

让 iOS 客户端登录到 Django 应用程序的最佳方法是什么 - 我已经探索了以下 2 种方法,但每种方法似乎都有其优点和缺点。

在客户端,我正在使用 AFNetworking - 但如果它简化了身份验证过程,也可以使用 NSURLsession。

(A) 在 Django 中使用内置会话变量 客户端发送登录凭据以获取会话密钥,并在活动会话期间在所有标头中使用此密钥。

我可以在 Django 中使用 @login_required 指令自动执行此操作,还是我需要手动编写会话变量检查代码(例如,将传入的会话密钥与 request.session.session_key 进行比较)?此外,我是否仍然可以使用 sweetpie(尽管 Django 直接进行身份验证)作为 API 包装器,还是必须使用 Django 进行数据(JSON)处理

(B) 在 sweetpie (+Django) 中使用 OAuth2 为用户创建客户端 ID 和密钥;客户端在会话开始时将其发送出去(连同用户名和密码)——在这个美味派之后管理会话

这似乎需要一个客户端 ID 和一个需要为每个用户生成的密钥。从 Django 管理面板生成它很简单,但我不清楚如何动态创建它并在创建用户后立即将其传递给客户端。

【问题讨论】:

    标签: ios django


    【解决方案1】:

    在tastepie 中有一个管理命令可以为没有API 密钥的用户生成API 密钥:

    python manage.py backfill_api_keys
    

    您还需要一种方法来为每个新用户自动生成 API 密钥,from Tastypie docs

    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)
    

    一旦所有客户端都拥有 API 密钥,您就可以使用 BasicAuthentication 获取访问令牌以在您的应用中使用。 Check this gist,然后您可以向http://example.com/api/token/auth/ 提出请求以获取您的令牌。

    查看this post for an iOS example using OAuth2

    【讨论】:

    • 感谢 fasouto。在您指向的 OAuth2 示例中,该应用程序似乎使用客户端 ID 和密钥进行了硬编码 - 希望所有用户都可以使用相同的 ID/密钥对?
    • 我认为是的,它们可以是相同的。无论如何,我不是 100% 确定。
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2011-02-13
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    相关资源
    最近更新 更多