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

时间:2014-05-20 20:42:58

标签: api rest authentication oauth

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

某些API端点(例如那些会修改用户资源的端点)需要对用户进行身份验证,这似乎符合Resource Owner Password Credentials Grant定义。

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

How to keep the client credentials confidential, while using OAuth2's Resource Owner Password Credentials grant type

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

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

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

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

1 个答案:

答案 0 :(得分:0)

除非您完全控制用户用于连接服务的设备,否则无法使用您能提供的任何技术。

如果有一个软件在用户手机上运行?除了客户端凭证以外,除了客户端凭证之外,它还不需要任何其他任何特权操作,然后,有人能够弄清楚这些凭据是什么。

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

但是,如果您的移动应用只需要能够在创建它的设备上访问与特定数据相关的api,并且不希望用户进行身份验证,那么您可以只是'弥补'#39;每个设备随机的用户名和密码,并存储该。