TL; DR-跳过标记为的部分尽管有些上下文可能有用,但问题仍然存在。
一些背景
因此,我一直在网上寻找有关我将内部API内翻并开放给开发人员使用的一些问题的答案。我们的API已在生产中,并且当前需要使用标准会话进行保护。
现在,我已经确信用狗食自己的api是个好主意,因此我们可以跳过这一部分。我的问题与获取内部数据并使其在外部安全有关,请输入OAuth2。
在前端,我们是一个angular.js应用程序,分布在网站的多个部分,我认为它很重要,我强调它不是一页应用程序。在后端,我们使用django和其他使用django-rest-framework构建的api。我不认为后端的细节真的很重要,但是django确实可以将其中的一些页面渲染出来。这意味着在某些情况下,Angular会预先传递数据,而不是向api请求所有内容。这也有助于我们使网站的某些部分对SEO更加友好。呈现页面并将所需的任何初始数据传递到angular之后,所有内容就是angular.js-> api
在我真正了解这个问题之前,要提到的最后一个细节是,该api目前具有一些公共端点,根据定义,这些内容在前端可以公开获得,可以从api公开获得,尽管这可能是我们想要的东西改变。
一些推理
我已经从头到尾阅读了几乎全部的OAuth2规范,阅读了我在网上可以找到的每篇文章,甚至还买了一本关于该主题的书,而我只缺少其中一部分,这是一个至关重要的例子我想用OAuth替换我们的Web平台上当前的身份验证的实现。
如果我们要向第三方提供API,那么OAuth2似乎是目前唯一的声音选择。狗食的api只会改善它。因此,我们自己剩下了Needing Access令牌。这是我无法做出决定的地方。
我们已经开始将API从主要的Django api(现在用flask编写)中分离出来,因此向该api添加oauth将是很自然的一步。我们显然不能给角形钥匙,所以我们还剩下什么呢?
问题
我们能否将基于会话的Auth替换为OAuth2。我们的内部api目前正在使用会话进行身份验证。如果我们将API供第三方使用,我们如何为主要的Web平台实现OAuth?
我们默认是HTTPS
老实说,以上似乎都不是一个不错的选择。这将对整个行业产生可怕的影响,我无法想象在开发中使用这些选项会带来多大的痛苦。我的意思是,这是个好主意吗?有什么更简单的方法我只是忽略了。
规范始终会为您信任第一方应用程序(例如移动客户端)的情况提供解决方案,但老实说,我只是对第一方实际上是网站的情况没有想到任何启发。
我感谢花时间阅读本文的任何人。正如我提到的,我已经阅读了在这些主题上可以找到的所有内容,并且大多数内容都是基于-我应该使用自己的api还是应该使用单点登录?我所寻找的是关于在实际意义上实际实施这些事情的信息,并希望对那些在生产中实现此目标的人有一些智慧。
感谢您抽时间阅读。
最佳答案
我已经考虑了一段时间-我目前正在构建一个可访问内置节点REST API的角度应用程序。与REST保持一致,我不应该维护会话,而应该在每个请求中传递一些用户/密码详细信息。
现在显然,许多API都乐于使用某种基本授权或api密钥,从而避免使用oauth2,但我想用google / facebook登录,因此需要进行一定数量的令牌争用。我正在使用的特定流程是-
如果您要向第三方开放API,则可能需要做更多的工作,但这并不是我目前考虑的太多。
关于django - 一个人应该吃多少狗粮? -内部和外部RestAPI和Oauth2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18585604/