【发布时间】:2017-07-06 07:44:22
【问题描述】:
API 消费者订阅特定 API 门户上的 API。 他收到客户端 ID 和客户端密码。 订阅有一个特定的 quata 集。
[快乐一天情景]
- 然后他决定创建一个 Web 应用程序并将客户端密码安全地放在服务器上。
- 然后他决定使用 Auth 代码授权
- 在收到用户的 auth_code 后,后续调用以获取 acces_token 将是带有客户端密码的服务器到服务器请求。
- 因此,通过安全存储和使用 client_secret 解决了目的。
[不开心的一天场景]
- 后来,他决定创建一个原生应用(公共客户端 - Android/IOS 应用),该应用使用他之前订阅的相同 API。
- 要让原生应用访问 API,它需要 access_token。
- 用户通过身份服务器进行身份验证并提供授权。
- 接收 auth_code 并重定向回应用程序。
- 然后应用程序将需要此 auth_code + 客户端 ID + client_secret 来获取 access_token。
- 但在这种情况下,client_secret 没有安全存储。应用可以被反编译,client_secret 可以被滥用,代价是 API 消费者购买/订阅 API。
隐式流选项被排除。
可能的解决方法:
- 创建一个存储 client_ID 和 client_secret 的代理,本机应用使用 auth_code 调用此代理以获得访问令牌。
- 加密client_secret 请就更好和推荐的解决方案/模型提出建议。
【问题讨论】:
标签: android oauth oauth-2.0 iso