OAuth2原生应用 - 客户端密码

时间:2017-02-16 23:38:01

标签: android oauth oauth-2.0 iso

API使用者,订阅特定API门户上的API。 他收到了客户ID和clinet的秘密。 订阅中有一个特定的quata集。

[情人节快乐]

  • 然后他决定创建一个Web应用程序并将客户端安全地保密在服务器上。
  • 然后他决定使用Auth代码授予
  • 在接收到用户auth_code之后获取access_token的子请求调用将是客户端密钥的服务器到服务器请求。
  • 因此,安全地存储和使用client_secret解决了目的。

[不是快乐的一天情景]

  • 后来,他决定创建一个本机应用程序(公共客户端 - Android / IOS应用程序),该应用程序使用他之前订阅的相同API。
  • 要让原生应用访问API,需要access_token。
  • 用户对身份服务器进行身份验证并提供授权。
  • 接收auth_code并重定向回应用程序。
  • 然后,应用程序将需要此auth_code +客户端ID + client_secret来获取access_token。
  • 但在这种情况下,client_secret没有安全存储。该应用程序可以被反编译,并且可以以API消费者购买/订阅API为代价来滥用client_secret。

排除了隐式流量选项。

可能的解决方法:

  • 创建一个代理,其中存储client_ID和client_secret,本机应用程序使用auth_code调用此代理以获取访问令牌。
  • 加密client_secret 请提供更好和推荐的解决方案/型号的建议。

1 个答案:

答案 0 :(得分:0)

通过为本地可用的/ oauth2 / authorize端点创建API,我找到了一种更好的解决方法。

所以这是流程:

  1. 我的API将接受请求中的用户名,密码和clientID
  2. API将根据数据库验证收到的clientID
  3. 如果有效,请从DB
  4. 获取clientID的client_secret
  5. 在运行时创建授权:基本base64(clientID:client_secret) - 使用脚本编制器
  6. 将此创建的授权标头添加到请求
  7. 将此请求本地转发到实际的/ oauth2 / authorize端点
  8. 通过不将client_secret嵌入公共客户端(本机应用程序)并且适合我的情况,这是完美的,因为我管理API网关:)

    注意:适用于auth_code授权流程