允许使用 Auth0 保护的 API 的开发人员访问令牌

Posted

技术标签:

【中文标题】允许使用 Auth0 保护的 API 的开发人员访问令牌【英文标题】:Allowing Developer Access tokens for an api secured with Auth0 【发布时间】:2017-05-09 07:09:43 【问题描述】:

我已成功使用 Auth0 一段时间,最近遇到了一个新挑战:允许外部开发人员使用我的网络应用程序提供的凭据访问我的 API。

当前系统包括:

使用 Auth0 登录的 Web 应用(目前不是 SPA) 带有 Auth0 api 身份验证的后端 API

目前在 Auth0 中只有一个客户端。用户登录网站,当他们通过网站调用 API 时,令牌会在标头中传递。

我的问题是:让开发人员在我的网站上以自助方式请求直接访问 api 的最佳方式是什么?

我看到了两条前进的道路,要么通过 Auth0 管理 API(github 风格)为每个开发者应用程序创建一个客户端,要么代表生命周期非常长的开发者请求一个令牌(如 AppVeyor)。

【问题讨论】:

【参考方案1】:

我假设您的 API 提供了与最终用户关联或拥有的功能和/或资源,并且您希望允许其他应用程序也代表每个最终用户访问这些数据。 如果不是这种情况,并且您的 API 是通用的并且不需要最终用户身份的概念,那么 API 密钥等其他方法也可以满足您的要求。

考虑到最终用户委托方案,我推荐的方法是在 Auth0 中创建单独的客户端应用程序。正如您所说,您可以通过管理 API 自动执行此过程,以便可以自助方式处理此过程。尽管是自助服务,但启用注册的应用程序仍然可以应用约束,以确保只有符合条件的开发人员才能获得必要的信息,然后获得访问令牌来访问 API。

这样做的好处是,如果您想阻止现有开发人员使用您的 API,您只需删除关联的客户端应用程序,他们将不再被允许请求访问令牌,而他们已经拥有的令牌将是短暂的并很快过期。使用长寿命令牌时,此要求实施起来更加复杂,因为它们需要被撤销/列入黑名单。


最后一点,如果这些应用程序在调用您的 API 时不需要代表最终用户执行操作,并且您仍希望接受访问令牌而不是使用 API 密钥等其他方法,那么您可以考虑注册旨在使用client credentials grant 的客户端应用程序。

【讨论】:

太好了,谢谢,您对 API 提供最终用户拥有的功能和资源的假设是正确的。这是我一直在寻找的建议。

以上是关于允许使用 Auth0 保护的 API 的开发人员访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 REST + CodeceptJS 测试 API,访问受 Auth0 保护?

如何在 Android 中打印受 Auth0-JWT 保护的私有 API 端点 JSON 对象?

ASP.NET Web API 授权和身份验证

如何在Redux中使用Auth0 JWT访问API?

如何保护您的 API 免受了解您 API 的开发人员的攻击? [关闭]

使用 Apigee 作为 Auth0 的身份验证存储替代品