我很擅长 Build 一个Oath2服务器,并希望有人可以帮助我解决一些问题 .
This is the package that I am implementing :
https://github.com/lucadegasperi/oauth2-server-laravel
从我的资源拥有者' grant_type is what I should be using for setting up a mobile app'的API访问很像移动银行应用程序(敏感数据)
Referencing the OAuth2 spec :
http://tools.ietf.org/html/rfc6749#section-4.3
OAth2规范指出客户端必须已经过身份验证,因此必须传递总共5个参数才能授予访问令牌:
- grant_type('password')
- 用户名
- 密码
- client_id
- client_secret
I have 2 questions regarding this :
-
Android和IOS应用程序是否能够保持'client_id'和'client_secret'机密? ('client'是应用或设备本身,而不是用户)
-
每台设备应该'client_id'和'client_secret'是唯一的吗? (我应该创建一个新的控制器,用于在单独的请求中为每个设备生成client_ids和client_secrets,或者使用相同的client_id和client_secret构建到应用程序中 . )
最后,我试图找出在'oath_clients'表中获取记录的最佳实践,以及这些条目是否应该是每个设备唯一的 .
谢谢你的帮助!
1 回答
是否所有设备应共享同一对client_id和client_secret,或者每个设备是否应该具有不同的client_id和client_secret对由您自己决定 . 从OAuth 2.0的角度来看,它们之间没有区别,因为OAuth 2.0并不关心每个应用程序实例如何获得一对client_id和client_secret . 你可以
在应用程序的源代码中嵌入了一对client_id和client_secret,或者
让您的应用程序与您的服务器通信,以便为其分配一对新的client_id和client_secret .
如果要为每个设备分配另一对client_id和client_secret,则流程如下所示 .
您的应用程序连接到您的服务器 .
您的应用程序将设备ID发送到您的服务器 .
您的服务器收到设备ID .
您的服务器生成一对client_id和client_secret .
您的服务器将该对发送回您的应用程序 .
您的应用程序收到该对 .
如果要通过client_id标识设备,则需要将每个client_id与每个设备关联 . 但是,如果您只是想知道哪个设备正在访问受保护资源,那么当客户端应用程序访问受保护资源的 endpoints 时,可能需要“device_id”参数或类似内容 . 具体来说:
最后,至于你的第一个问题 . OAuth 2.0认为本机应用程序不能保密客户端凭据 . 以下是“9. Native Applications”的摘录 .