我正在创建一个基于 Web 的服务,我想将其公开为 REST API,以便开发人员能够使用它创建应用程序。我希望开发人员能够创建/管理用户帐户并通过 API 进行身份验证。如何处理? OAuth 还是其他?
我为此使用了 python、flask、mongodb。
最佳答案
我们已经解决了以下问题,使用 OAuth 2 (这比 OAuth 1 更可取)。特别是我们正在使用 resource owner password credentials流动。至于如何将其集成到我们的RESTful服务中,思路如下:
- 初始资源在被未经授权的用户访问时返回 401。401 的主体包含一个链接,带有
rel=oauth2-token
。 . (您如何指示链接取决于您的媒体类型;我们使用 HAL ,但您甚至可以只使用Link
header 。) - 用户通过身份验证后,他返回初始资源,在他的
Authorization
header 中发送从 OAuth 2 进程返回的不记名 token 。此时,我们返回 200,其中包含所有可用的正常链接。
我们不会公开帐户创建,但如果您想这样做,我会在初始资源中使用另一个可供未授权用户使用的链接来实现。该链接将具有自定义 rel
,因为它特定于您的应用程序,例如rel=http://rels.myapi.com/users
良好的 RESTful 设计会表明带有此 rel
的链接指向例如http://myapi.com/users
,并且 API 的消费者对该端点执行 POST
,这会向他们返回带有 的新用户资源Location
header 指向新创建的用户资源,例如http://myapi.com/users/用户名
。 (用户资源本身当然是另一个rel
,区分单个用户资源和多个用户集合资源。)
关于python - 如何为 REST API 实现身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11499995/