首页 文章

OAuth2服务器设置'client_id' ad''client_secret' for 'password' grant type

提问于
浏览
5

我很擅长 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 回答

  • 7

    是否所有设备应共享同一对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”参数或类似内容 . 具体来说:

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

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

    使用授权代码授权类型的本机应用程序应该在不使用客户端凭据的情况下这样做,因为本机应用程序无法保密客户端凭据 .

相关问题