如何保护移动应用程序和服务器之间的REST API

如何保护移动应用程序和服务器之间的REST API,rest,api,ionic3,Rest,Api,Ionic3,我的项目包括一个web应用程序、一个移动应用程序和一个RESTAPI模块 该移动应用程序由安卓版的Ionic 3制作,并使用一个REST API,该API位于带有https的服务器上的example.com/API.php地址。API可以访问MySQL数据库 对于访问API的用户,我必须创建登录/访问API函数/注销,因为他们已经在web应用程序中创建了帐户 主要关注点是实现安全登录。也就是说,如果有人试图在未经授权的情况下访问我的API(知道地址、函数名或使用的参数名)以接收错误消息。为了访问

我的项目包括一个web应用程序、一个移动应用程序和一个RESTAPI模块

该移动应用程序由安卓版的Ionic 3制作,并使用一个REST API,该API位于带有https的服务器上的example.com/API.php地址。API可以访问MySQL数据库

对于访问API的用户,我必须创建登录/访问API函数/注销,因为他们已经在web应用程序中创建了帐户

主要关注点是实现安全登录。也就是说,如果有人试图在未经授权的情况下访问我的API(知道地址、函数名或使用的参数名)以接收错误消息。为了访问API,您必须登录并有权访问某个部分(我有多个访问级别)。 但是,如何检测访问我的RESTAPI的用户是否已登录并具有适当的权限

该计划:

  • 用于登录步骤 为了访问RESTAPI,我必须在应用程序中使用用户名/密码登录。我检查凭据是否正确(如果用户存在,那么我确定访问级别),并返回一个JWT,其中包含用户ID和其他参数(如果需要)(令牌)。将手机存储在JWT的本地存储器中

  • 保护对REST API函数的访问 问题是:我该怎么做?如何从RESTAPI访问安全函数

    • 对于我向RESTAPI发出的每个请求,我是否也应该从本地存储发送令牌,并在服务器端进行验证
    • 如何在服务器上执行验证?我是否将令牌存储在设备和服务器上,并对每个请求进行比较

  • 非常感谢

    有多种方法,全靠你自己。因此,我分享我通常使用的方法,但并不声称这是最安全的方法

    我们使用
    加密
    解密
    私钥
    。例如:

    注册用户Web服务

    我们有4个参数1。用户名2。名字3。电邮4。密码。使用我的注册web服务

    我们将使用带有私钥的数据concat创建
    SHA256哈希。然后,我们将把
    散列
    密钥传递给服务器,在服务器端,我们将使用相同的方法生成散列密钥,并对两者进行比较

    例如,带有私钥的字符串=
    UsernameEmailPasswordPrivateKey
    字符串的sha256=
    7814b2d22af647308884acff0be4c675b7f72ba000cf1e8390520100cc930e74


    您可以拥有数据字符串的任何序列,并且相同的方法将用于您的服务器。始终在服务器上使用
    SSL证书
    ,以提高安全性

    有很多方法可以做到这一点,包括注册用户、使用令牌等。在堆栈溢出时,您应该显示您尝试过的内容和不起作用的内容。有关如何发布问题的建议,请参阅。像这样的问题往往被认为是广泛的或基于意见的,因为有很多方法可以做你正在尝试的事情。我在过去使用过令牌方法,即登录,为所有REST请求提供令牌,服务器验证令牌是否仍然有效,如果是,则执行请求。