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

c-g*_*fin 5 android ios oauth-2.0 laravel

我很擅长建立一个Oath2服务器,并希望有人可以帮助我解决一些问题.

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

从我读过关于这个包,Im相当肯定的是,"密码" /"资源Ownner" grant_type是我应该使用的大部分设置一个移动应用程序的API访问诸如移动银行应用程序(敏感数据)

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

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

我有两个问题:

  1. Android和IOS应用程序是否能够保持"client_id"和"client_secret"的机密性?('客户'是应用或设备本身,而不是用户)
  2. 每个设备的'client_id'和'client_secret'应该是唯一的吗?(我应该创建一个新的控制器,用于在单独的请求中为每个设备生成client_ids和client_secrets,或者使用相同的client_id和client_secret构建到应用程序中.)

最后,我试图找出在'oath_clients'表中获取记录的最佳实践,以及这些条目是否应该是每个设备唯一的.

谢谢你的帮助!

Tak*_*aki 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.

如果要为每个设备分配另一对client_id和client_secret,则流程如下所示.

  1. 您的应用程序连接到您的服务器
  2. 您的应用程序将设备ID发送到您的服务器.
  3. 您的服务器收到设备ID.
  4. 您的服务器生成一对client_id和client_secret.
  5. 您的服务器将该对发送回您的应用程序.
  6. 您的应用程序收到该对.

如果要通过client_id标识设备,则需要将每个client_id与每个设备关联.但是,如果您只是想知道哪个设备正在访问受保护资源,那么当客户端应用程序访问受保护资源的端点时,可能需要"device_id"参数或类似内容.具体来说:

GET /protected_resource?access_token=.....&device_id=.....
Run Code Online (Sandbox Code Playgroud)

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

使用授权代码授权类型
的本机
应用程序应该在不使用客户端凭据的情况下执行此操作,因为本机应用程序无法保持客户端凭据的机密性.