android – 如何仅限授权客户端访问我的REST API?

我设计的REST API将用于iOS和Android应用程序,以及将来可能用于Web和其他移动客户端.

如何将我的整个API仅限制为我想要访问的客户端(应用程序)?我想阻止第三方访问我的API以注册用户,甚至无需通过授权应用程序(移动或Web客户端)登录.

目前的想法

我可以为每个客户端提供我想要授权的密钥,但是如何防止从我的应用程序的源代码中提取此密钥(如果我的应用程序是Web应用程序,则特别容易)?此外,如果密钥需要在将来更改(由于妥协),这将很困难,因为我的所有客户端都需要更新,旧客户端将无法运行.必须有一个更好的解决方案.

我正在使用JWT进行用户身份验证,但我没有看到如何将此问题应用于我的问题.我真的很喜欢JWT如何轻松实现,所以如果我可以应用JWT实现来解决这个问题会很棒.

解决方法

当您在客户端中嵌入访问密钥时,您基本上接受它已被暴露.像proguard和ssl这样的当前技术可以保护它,但它并不能阻止坏人以合法的方式滥用它(即通过应用程序).事实上,在需要用户验证的情况下,这仍然适用.因此,防止滥用只是安全范式的一半.另一半是识别施虐者.

这就是说你不能希望在阻止访问密钥被黑客攻击方面做得更多.但是,您可以在服务器控制的权限下再次对其进行分层.我所知道的一种方式是令牌机制.用户发送带有访问密钥和设备参数的请求.一旦验证,你就会给他一个有效期的令牌.有了这个标记,他就可以访问你的资源了.这种方法有两个好处:

>仍然可以通过设备参数识别用户.根据这些信息和访问频率,您可以决定他是否是施虐者.令牌本身在一段时间后过期,所以如果他是,那么你可以拒绝他下一个令牌.
>您无需更新访问密钥.

实际上,这种机制与Amazon Token Vending Machine类似,后者被服务Amazon Cognito取代.

相关文章

AdvserView.java package com.earen.viewflipper; import an...
ImageView的scaleType的属性有好几种,分别是matrix(默认)...
文章浏览阅读8.8k次,点赞9次,收藏20次。本文操作环境:win1...
文章浏览阅读1.2w次,点赞15次,收藏69次。实现目的:由main...
文章浏览阅读3.8w次。前言:最近在找Android上的全局代理软件...
文章浏览阅读2.5w次,点赞17次,收藏6次。创建项目后,运行项...