微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

移动应用程序的 Python REST API 登录/身份验证/授权

如何解决移动应用程序的 Python REST API 登录/身份验证/授权

在过去的两周里,我可能花了 150 个小时阅读和观看有关移动应用安全和 REST API 身份验证策略的教程,而且我的生活中可能从未如此困惑和不知所措,哈哈。我已经学会了一千件我不应该做的事情,但我仍然没有真正掌握我应该做什么。

作为背景,这个移动应用程序不会处理超级敏感的信息(没有财务、没有 HIPAA 内容等),但我仍然想通过最佳实践来保护它及其 REST API,最好同时保持我的理智. API 将是应用程序私有的,基于 Python,并允许电子邮件/密码登录以及社交登录 (Google/Facebook)。一旦用户最初注册登录,除非他们有意退出或想在第二台设备上登录,否则他们应该永远不必再次登录

我已经研究了 Django Rest Framework 和 Flask 来构建 API,尽管后者的具体风格似乎更符合我的喜好,但我更多地关注 DRF,因为它似乎有关于身份验证的更好的文档。迄今为止,我浏览过的最有用的指南之一是 2018 年关于 Guide to an OAuth2 API with Django 的 Medium 文章;以及 Social Logins with React and DRF 上的 2020 年 YouTube 视频(使用 drf-social-oauth2)。

但是,我仍然有很多问题/疑虑:

  • 我还没有找到可以帮助我完全理解如何将 PCKE 实施到 OAuth2 工作流程中的指南/教程(这似乎是当前的建议)。这些天 PCKE 真的是标准做法,还是我在安全兔子洞里钻得太深了?
  • 使用 drf-social-oauth2 和 django-allauth + dj-rest-auth 之类的库,我很难理解如何将授权服务器与资源服务器(以及 PCKE 工作流程中的第三个身份验证服务器)分开?)。这在理论上听起来足够合乎逻辑,但就我的生活而言,我无法找到一个可以将该理论变为现实的可理解模型。我很惊讶我没有看到更多人有同样的困惑,所以我想知道我是否只是遗漏了一些完全基本的东西。
  • 我上面链接的 YouTube 教程看起来非常强大,直到它开始将客户端机密直接嵌入 (React) 应用程序中,每个人(包括视频中的那个人)似乎都同意这是一个巨大的禁忌。我猜这些秘密属于授权服务器上的代码(好吧,更确切地说,在服务器的环境变量中),但是,同样,我不清楚像 drf-social-oauth2 这样的库是否有助于这样的设置.
  • 我如此关注 OAuth2 是否正确,还是应该在 OpenID Connect (OIDC) 之上学习更多?

这只是我困惑的开始。即使我弄清楚了上述内容并让我的 API 成功地向我的移动应用授予令牌,也会出现一系列全新的问题:

  • 既然我希望我的用户保持登录状态,那么我的令牌管理策略应该是什么?我是否应该为刷新令牌而烦恼,或者是否有发布没有到期日期的访问令牌的用例?
  • 使用 JWT 是否有强有力的论据?
  • 是否(相对)可以在 Android 应用的共享首选项中存储令牌?
  • 如果我确实依赖刷新令牌,是否有关于访问和刷新令牌各自应持续多长时间的一般策略?以及应如何/何时在应用程序工作流中刷新令牌? (注意:这是我迄今为止研究最少的问题。我在这里主要是为了强调我在试图弄清楚这一切时迷失了多少。)

然后是更存在的问题:

  • 如果我完美地实施了这一切,我实际上完成了多少?就像,即使客户端机密隐藏在授权服务器中,PCKE 正在运行等等,有人会根电话并反编译我的代码并可以模仿用户注册获取令牌并发出 API 请求,对吗?
  • 换句话说,我问的问题是否正确?

无论如何,对于这篇文章的冗长混乱,我深表歉意。我想我可能有 70% 的人希望得到答案,20% 的人希望发泄,10% 的人希望得到精神上的支持。如果有人至少可以让我知道我是否在正确的轨道上,那就太好了;或者如果我不是,请给我指出那个方向。谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。