结合API的oAuth 2.0客户端凭据和资源所有者密码凭据授予类型?

Mar*_*phy 7 authentication api rest oauth

我们正在构建一个REST API,它将由我们自己的移动应用程序以及其他应用程序使用.我们希望使用似乎符合oAuths Client Credentials Grant定义的API密钥来保护它不被公开访问.

某些API端点(例如那些会修改用户资源的端点)将要求用户进行身份验证,这似乎符合资源所有者密码凭据授权定义.

这个问题基本上总结了与下面相关的相同场景,但没有要求任何实际实现可能的示例:

使用OAuth2的资源所有者密码凭据授予类型时,如何保持客户端凭据的机密性

这是一个难以构建的问题.我已经看过尽可能多的类似问题,但我们似乎都没有回答以下问题:

这样的事情如何发挥作用?除了在某些端点上为用户请求/传递access_token之外,客户端是否只传递API密钥参数/标头以及每个请求?

在源代码(特别是ruby/rails)方面,是否存在任何可公开访问的示例?

另外,我并没有严格依赖oAuth,所以让我知道是否有其他安全且经过验证的方法可以做同样的事情.

Eve*_*ert 1

无论您能想出什么技术,这都是不可能的,除非您 100% 控制用户用来连接到您的服务的设备。

如果有一个软件在用户的计算机上运行,​​并且除了客户端凭据之外不需要任何其他东西来执行某些特权操作,那么是的,有人将能够弄清楚这些凭据是什么。

如果您担心恶意用户会做一些他们不允许做的事情,您只需将其放在用户名和密码系统后面,这意味着资源所有者密码凭证(或者实际上最好是授权代码授予)。

但是,如果您的移动应用程序只需要能够访问与创建它的设备上专门的数据相关的 api ,并且不希望用户进行身份验证,那么您可以为每个设备“编写”一个随机用户名和密码并存储它。