我认为这已经得到了回答,但快速SO search没有产生任何结果。
我有一个由APIKey锁定的私有API。需要为每个请求传递此密钥。使用此密钥,您可以访问API的任何部分。显然,这是非常开放。在大多数情况下,这是可以接受的。但是,在某些情况下,我希望确保请求是由所有者发送的。
例如,考虑更新或删除请求。您不应该对其他人的数据提出此请求。因此,除了APIKey之外,我还希望有其他方法来确保发出请求的用户授权来执行该操作。
我可以要求带有此类请求的 ownerID 。但这很快就会形成。所以我获得了什么。
我很想知道SO的其他成员在这些情况下实施了什么。个人APIKeys?双授权?
如果重要,我的API遵循REST架构,并使用PHP / Apache开发。
答案 0 :(得分:0)
每个用户的API密钥应该是唯一的。这将验证用户并且他们应该有权访问数据。
如果您想要更加安全,可以将api secret用作刷新令牌,该令牌可用于检索具有自动过期的访问令牌。
还建议所有请求使用SSL。
答案 1 :(得分:0)
每个API用户都有一个唯一的API密钥。此密钥将它们标识为系统的单个用户。在处理更敏感的数据时,我使用client side certificates进行身份验证,但是基本身份验证+需要SSL通常就足够了。
当请求进入时,将API密钥映射到用户,然后确定该用户是否“拥有”他们尝试与之交互的资源。
整个“确定所有者”部分是一个单独的问题,根据系统的构建情况,在API中做得很好很棘手。我也可以分享过去我们是如何做到这一点的,但我认为这有点偏离主题。
答案 2 :(得分:0)
建议您考虑使用Oauth。总之,这是它应该如何工作。
每个进行API调用的应用程序都需要相应的应用程序级API密钥才能通过Oauth进程进行授权。这里的Apikey只代表应用程序(客户端)身份。
与使用相关联的每个最终用户必须在Oauth授权过程中单独进行身份验证(独立于apikey)。然后将用户身份,相关联的上下文(例如授权范围)编码到称为访问令牌的令牌中。
一旦应用程序获得此访问令牌,访问资源的所有后续API调用都应使用访问令牌,直到到期为止。
在API实现方面,访问令牌验证应该揭示最终用户上下文(包括在Oauth过程中授予的访问范围),因此可以通过以下方式管理使用特定资源的访问/授权。资源服务器。