OAuth2 "client credentials" 授予:远程 IP 检查?
OAuth2 "client credentials" grant: remote IP check?
我正在开发一个 API,它只需要由服务器访问,而不是特定的人类用户。我一直在使用 client credentials grant,如果我没记错的话,它适用于这个用例。
所以远程 websites/apps,在注册了他们相应的 OAuth2 客户端之后,只是简单地使用他们的客户端 ID/secret 组合,通过 SSL POST 请求 + HTTP Basic 请求一个访问令牌身份验证。
现在我想知道在所述访问令牌请求期间检查远程 IP 以确保它确实属于已注册的客户端是否是个好主意(你有在声明您的应用程序时声明一个或多个 IP,然后将根据发出 POST /token 请求的服务器的远程 IP 检查它。
我觉得这将是一种简单的方法,可以确保即使客户端 ID/secret 以某种方式被盗,它们也不会在任何地方都可用。
作为 OAuth2 协议的新手,我需要一些关于这是否是有效方法的意见。有没有更聪明的方法来做到这一点,还是直接没有必要(在这种情况下,出于什么原因)?
提前致谢
这当然是一种有效的方法,但将令牌与网络层和部署紧密绑定,这可能使更改网络架构变得困难。 OAuth 解决您的问题的方式是所谓的所有权证明扩展 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-pop-architecture.
可能值得考虑实现这一点:尽管它还不是最终确定的规范,但它将令牌绑定到客户端而不是 IP 地址,这样可以防止网络变化并且更适合未来。
我正在开发一个 API,它只需要由服务器访问,而不是特定的人类用户。我一直在使用 client credentials grant,如果我没记错的话,它适用于这个用例。
所以远程 websites/apps,在注册了他们相应的 OAuth2 客户端之后,只是简单地使用他们的客户端 ID/secret 组合,通过 SSL POST 请求 + HTTP Basic 请求一个访问令牌身份验证。
现在我想知道在所述访问令牌请求期间检查远程 IP 以确保它确实属于已注册的客户端是否是个好主意(你有在声明您的应用程序时声明一个或多个 IP,然后将根据发出 POST /token 请求的服务器的远程 IP 检查它。
我觉得这将是一种简单的方法,可以确保即使客户端 ID/secret 以某种方式被盗,它们也不会在任何地方都可用。
作为 OAuth2 协议的新手,我需要一些关于这是否是有效方法的意见。有没有更聪明的方法来做到这一点,还是直接没有必要(在这种情况下,出于什么原因)?
提前致谢
这当然是一种有效的方法,但将令牌与网络层和部署紧密绑定,这可能使更改网络架构变得困难。 OAuth 解决您的问题的方式是所谓的所有权证明扩展 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-pop-architecture.
可能值得考虑实现这一点:尽管它还不是最终确定的规范,但它将令牌绑定到客户端而不是 IP 地址,这样可以防止网络变化并且更适合未来。