OAuth2服务器设置'client_id'广告''client_secret'用于'密码'授权类型

时间:2014-04-03 02:39:40

标签: android ios laravel oauth-2.0

我在设置Oath2服务器时相当新,并且希望有人可以帮助我了解一些事情。

这是我正在实施的软件包
https://github.com/lucadegasperi/oauth2-server-laravel

根据我对此软件包的了解,我非常确定密码' /'资源所有者' grant_type是我应该用来设置移动应用程序的API访问,就像移动银行应用程序(敏感数据)一样

引用OAuth2规范
http://tools.ietf.org/html/rfc6749#section-4.3

OAth2规范规定客户端必须已经过身份验证,因此必须传递5个参数才能被授予访问令牌:
- grant_type('密码')
- 用户名
- 密码
- client_id
- client_secret

我对此有两个问题

  1. Android和IOS应用是否能够保持' client_id'和' client_secret'机密? ('客户端'是应用或设备本身,而不是用户)
  2. 应该' client_id'和' client_secret'每台设备都是独特的? (我应该创建一个新的控制器,用于在单独的请求中为每个设备生成client_ids和client_secrets,或者使用相同的client_id和client_secret构建到应用程序中。)
  3. 最终,我试图找出在“oath_clients”中获取记录的最佳做法。表格以及每个设备的条目是否应该是唯一的。

    谢谢你的帮助!

1 个答案:

答案 0 :(得分:7)

是否所有设备都应该共享同一对client_id和client_secret,或者每个设备是否应该有一对不同的client_id和client_secret由您自己决定。从OAuth 2.0的角度来看,它们之间没有区别,因为OAuth 2.0并不关心每个应用程序实例如何获得一对client_id和client_secret。你可以

  1. 在您的应用程序的源代码中嵌入了一对client_id和client_secret,或者
  2. 让您的应用程序与您的服务器通信,以便为其分配一对新的client_id和client_secret。
  3. 如果您想为每个设备分配一对不同的client_id和client_secret,那么流程将如下所示。

    1. 您的应用程序连接到您的服务器。
    2. 您的应用程序会将设备ID发送到您的服务器。
    3. 您的服务器收到设备ID。
    4. 您的服务器生成一对client_id和client_secret。
    5. 您的服务器将该对发送回您的应用程序。
    6. 您的申请会收到该对。
    7. 如果要通过client_id标识设备,则需要将每个client_id与每个设备关联。但是,如果您只是想知道哪个设备正在访问受保护的资源,那么可能需要“device_id”#39;客户端应用程序访问受保护资源的端点时的参数或类似内容。具体来说:

      GET /protected_resource?access_token=.....&device_id=.....
      

      最后,关于你的第一个问题。 OAuth 2.0认为本机应用程序不能保密客户端凭据。以下摘录自" 9. Native Applications"。

        

      使用授权代码授予类型的本机应用程序   由于本土的原因,应该在不使用客户凭证的情况下这样做   应用程序无法保密客户凭证。