【问题标题】:django oauth2 rest authentication flow for mobile appsdjango oauth2 移动应用程序的其余身份验证流程
【发布时间】:2016-01-27 13:02:36
【问题描述】:

我正在尝试找出从我的移动应用程序到我的 api 交互的最佳流程。

我正在使用这些包:

https://github.com/evonove/django-oauth-toolkit
http://www.django-rest-framework.org

我想要这个流程:

  1. 用户使用用户名和密码在我的移动应用上编译注册视图
  2. 用户提交注册
  3. 我的应用程序向我的后端发出请求以获取 应用程序的令牌
  4. 带有令牌的应用程序调用用户注册api
  5. 我的后端注册用户,登录并返回用户令牌以供将来调用。

我的流程正确吗?
如果我使用基于密码的资源所有者并且我提出这样的请求:

 curl -X POST -d "grant_type=password&username=username&password=password" -u "client_id:client_secret" http://127.0.0.1:8000/api/v2/oauth/token/

我明白了:

 {"access_token": "09Vf0HD5nCPSEvLAnjxrghZPHfvE4c", "token_type": "Bearer", "expires_in": 36000, "refresh_token":"yDmovryDlGhkLVV6T2rTgFQxnNtguq", "scope": "read write groups"}

但如果我想通过以下方式为我的应用获取访问令牌:

 curl -X POST -d "grant_type=client_credentials" -u "client_id:client_secret" http://127.0.0.1:8000/api/v2/oauth/token/

我明白了:

 {"error": "unauthorized_client"}

所以我的疑问是:
我应该如何设置我的应用程序?
我的 oAuth2 应用程序应该具有哪种授权授权类型?

【问题讨论】:

    标签: django oauth-2.0


    【解决方案1】:

    resource owner password credential 代表用户(资源所有者)对您的应用程序进行身份验证,从而授予对与该用户相关的数据的访问权限。

    client_credential 当你想验证你的应用程序而不是用户时需要授权类型。颁发的访问令牌不会绑定到用户,而是绑定到应用程序,并且此令牌通常只允许访问与应用程序相关的数据。

    如果您想在 DOT 中启用此授权,您应该在应用程序创建表单中选择“客户端凭据”。

    您描述的流程看起来不错,但请记住,您需要两个应用程序:一个用于客户端凭据授权,一个用于密码授权。

    在服务器端,注册端点应该有一个权限检查,只允许来自 client_credential access_tokens 的请求。 注册成功后(比如 201),您可以在删除之前使用用户名和密码获取“用户令牌”。

    只有一个问题,我不明白您为什么需要 python 社交身份验证。您描述的流程中没有提及它。

    【讨论】:

    • 好的,现在一切都清楚了。我已经在考虑创建两个应用程序:一个用于应用程序(实际上只是为了进行注册 api 调用),第二个用于用户。回顾:dpaste.com/1TASM5X.txt 那么,我应该在我的移动应用程序中存储一对 client_id、client_secret 吗?一种用于应用程序,另一种用于代表我的用户的应用程序?从来没有见过这个,所以我问是否经常使用两个应用程序。当您说“在删除它们之前”时,您的意思是删除用户/在应用程序中传递并使用获得的令牌代替将来的调用,对吗?谢谢!
    • 或者也许这 4 步可以用 django 代码在服务器端完成?
    • 您永远不应该在您的应用程序中存储 client_secret,因为它不是机密客户端,因此只需将应用程序设置为公开。另一方面,根据 RFC6749,client_credential 只能由机密客户端使用。所以你有问题。通常我们通过标准的webview注册用户,并且我们保留一个使用密码grant_type的Public应用程序,所以我们不必存储client_secret。最后,是的,您必须在获得令牌后丢弃用户名和密码。
    • 也许我错过了什么:dpaste.com/1WWF262.txt ?我的应用程序现在使用客户端凭据公开,我不知道应该如何验证我的应用程序以进行注册用户调用。
    • 授权:令牌标头无效。您必须使用授权:Bearer
    猜你喜欢
    • 1970-01-01
    • 2014-07-10
    • 2020-01-18
    • 2012-06-04
    • 2017-12-06
    • 2015-10-01
    • 2016-10-22
    • 2021-12-26
    • 2014-09-29
    相关资源
    最近更新 更多