Angular 角度5:有没有隐藏API调用的方法?还是保密?

Angular 角度5:有没有隐藏API调用的方法?还是保密?,angular,Angular,我开始学习Angular,我注意到我对后端的每个调用都可以从开发人员工具中看到。所以当我得到这样的方法/函数时: getUser(userId){ return this.http.post('server/page/get-user', {id:userId}); } 然后在某些组件中,我会这样称呼它: this.userService.getUser(2).subscribe((data)=> { console.log(data) }) 什么基本上返回用户信息名称

我开始学习Angular,我注意到我对后端的每个调用都可以从开发人员工具中看到。所以当我得到这样的方法/函数时:

getUser(userId){
    return this.http.post('server/page/get-user', {id:userId});
}
然后在某些组件中,我会这样称呼它:

this.userService.getUser(2).subscribe((data)=> {
    console.log(data)
})
什么基本上返回用户信息名称,地址等,根据什么用户id得到张贴。如果想要获得随机的用户信息,难道他们不能使用请求负载中的随机数对该端点进行API调用,然后只获取该用户信息吗

我读到一篇文章说,解决这个问题的一种方法是使用JWT,它基本上是对有效负载进行加密的,但是难道没有一个选项可以让这个api调用只在我的应用程序中使用吗?或者至少对开发人员工具隐藏它

有办法隐藏API调用吗?还是保密

否。浏览器属于用户。它的功能在他们的控制之下,而不是你的控制之下

什么基本上返回用户信息名称,地址等,根据什么用户id得到张贴。如果想要获得随机的用户信息,难道他们不能使用请求负载中的随机数对该端点进行API调用,然后只获取该用户信息吗

如果您正在运行未经验证的API。对

这听起来像是你的愿望,这是非常不可靠的

我读到一篇文章说,解决这个问题的一种方法是使用JWT,它基本上对有效负载进行加密

不是真的

您需要身份验证/授权

您需要通过用户名和密码、OAuth和Facebook或Twitter等提供商来识别用户

然后,您需要确保允许用户读取他们请求的数据。e、 g.用户记录只能由拥有该记录的用户或具有管理员角色的用户访问

是否有选项可以使此api调用仅在我的应用程序中可用

没有

或者至少对开发人员工具隐藏它

没有

有办法隐藏API调用吗?还是保密

否。浏览器属于用户。它的功能在他们的控制之下,而不是你的控制之下

什么基本上返回用户信息名称,地址等,根据什么用户id得到张贴。如果想要获得随机的用户信息,难道他们不能使用请求负载中的随机数对该端点进行API调用,然后只获取该用户信息吗

如果您正在运行未经验证的API。对

这听起来像是你的愿望,这是非常不可靠的

我读到一篇文章说,解决这个问题的一种方法是使用JWT,它基本上对有效负载进行加密

不是真的

您需要身份验证/授权

您需要通过用户名和密码、OAuth和Facebook或Twitter等提供商来识别用户

然后,您需要确保允许用户读取他们请求的数据。e、 g.用户记录只能由拥有该记录的用户或具有管理员角色的用户访问

是否有选项可以使此api调用仅在我的应用程序中可用

没有

或者至少对开发人员工具隐藏它

不,简言之,不

你有通过点击处理你的请求的端点来隐藏请求的方法,但是自从你开始,认为你不能。p> 让我进一步解释:Javascript在客户端浏览器中运行。这意味着客户机可以完全访问您的前端代码:如果他愿意,他可以完全分解您的应用程序

好的一面是,它只能在他自己的计算机上被破坏:客户端不能干扰另一个客户端的浏览器

另一方面,您的服务器可以被任何东西访问,但您是拥有主控权的人:您应该保护它

要做到这一点,正如您所说,您可以使用JWT。但是JWT是一个身份验证过程,它基本上是一个编码字符串。通过解码,您可以获取客户机信息,但这些信息不是从DB获取的,而是从令牌本身获取的

如果您想保护您的端点,例如,您可以声明只有具有令牌提供的ID的用户才能访问您的端点:没有签名就不能伪造令牌。这将保护您的端点并防止其他用户进行修改

另一方面,您还可以阻止其他应用程序使用此端点。例如,如果您的用户在您的应用程序以外的应用程序中使用其令牌,您可以拒绝。但是它变得更高级了,所以现在,我认为您应该关注从其他用户那里保护您的端点

考虑用与后端语言相对应的标记提出另一个问题,这将比提出角度解决方案更有帮助。

简言之,不

你有通过点击处理你的请求的端点来隐藏请求的方法,但是自从你开始,认为你不能。p> 让我进一步解释一下:Javascript在c语言中运行 客户端的浏览器。这意味着客户机可以完全访问您的前端代码:如果他愿意,他可以完全分解您的应用程序

好的一面是,它只能在他自己的计算机上被破坏:客户端不能干扰另一个客户端的浏览器

另一方面,您的服务器可以被任何东西访问,但您是拥有主控权的人:您应该保护它

要做到这一点,正如您所说,您可以使用JWT。但是JWT是一个身份验证过程,它基本上是一个编码字符串。通过解码,您可以获取客户机信息,但这些信息不是从DB获取的,而是从令牌本身获取的

如果您想保护您的端点,例如,您可以声明只有具有令牌提供的ID的用户才能访问您的端点:没有签名就不能伪造令牌。这将保护您的端点并防止其他用户进行修改

另一方面,您还可以阻止其他应用程序使用此端点。例如,如果您的用户在您的应用程序以外的应用程序中使用其令牌,您可以拒绝。但是它变得更高级了,所以现在,我认为您应该关注从其他用户那里保护您的端点


考虑使用与后端语言对应的标记提出另一个问题,这将比提出角度解决方案更有帮助。

尽管这条消息很久以前就发布了。在我的例子中,我将请求发送到一个新窗口,然后将响应发布回我的主窗口


在这种情况下,即使用户在打开的浏览器上打开“开发人员工具”上的“网络”选项卡,他也看不到日志。

尽管此消息是很久以前发布的。在我的例子中,我将请求发送到一个新窗口,然后将响应发布回我的主窗口


在这种情况下,即使用户在打开的浏览器上打开“开发人员工具”上的“网络”选项卡,他也看不到日志。

您可以使用debounceTime操作符来避免门户发送的请求垃圾邮件。您的API可以接受带有令牌的承载头,这样,只有拥有该令牌的用户才能发出请求。这只是web开发中关于安全性的基本规则。第一条规则是您不能控制客户端。即使你可以从devtools中隐藏它,我也可以使用其他工具查看所有请求如果你不通过服务器上的某种身份验证机制和访问控制来保护你的API,每个人都可以使用它来获取各种信息。我不得不为angular Universal重新编写angular应用程序,现在我还必须重新编写API的工作原理。基本上,我必须在API中定义标题,以允许我的应用程序访问它。现在我想知道,难道我不能使用类似的东西来阻止人们从外部访问我的API吗?在我目前的设置中,人们可以复制API端点并在Chrome中打开该端点并获取公共信息,但一旦他们尝试在应用程序中使用该端点,由于CORS,它将不会返回任何信息。我不知道这是否真的像我所想的那样有效,但这只是我脑海中的想法。你可以使用debounceTime操作符来避免门户的垃圾邮件请求。您的API可以接受带有令牌的承载头,这样,只有拥有该令牌的用户才能发出请求。这只是web开发中关于安全性的基本规则。第一条规则是您不能控制客户端。即使你可以从devtools中隐藏它,我也可以使用其他工具查看所有请求如果你不通过服务器上的某种身份验证机制和访问控制来保护你的API,每个人都可以使用它来获取各种信息。我不得不为angular Universal重新编写angular应用程序,现在我还必须重新编写API的工作原理。基本上,我必须在API中定义标题,以允许我的应用程序访问它。现在我想知道,难道我不能使用类似的东西来阻止人们从外部访问我的API吗?在我目前的设置中,人们可以复制API端点并在Chrome中打开该端点并获取公共信息,但一旦他们尝试在应用程序中使用该端点,由于CORS,它将不会返回任何信息。我不知道这是否真的能像我想的那样工作,但这只是我脑海中浮现的东西。但他们难道不能登录我的应用程序,复制生成的令牌,然后在他们的应用程序中使用该令牌调用我的API并仍然获得数据吗?@user1203497-是的。但既然你愿意让他们看到这些数据,那就没关系了。我的getUser函数的全部目的就是检索所有用户信息。之后,我可以简单地使用该功能获取用户信息,无论是设置页面,用户需要在其中查看信息,如仅供其查看的电子邮件,或具有名称等公共信息的用户公共配置文件。所以现在如果我使用Angular,我不能使用这么简单的方法,我必须基本上创建两个函数——一个用于私有数据,另一个用于公共数据。这两者本质上都在做相同的事情,只是其中一个只能检索经过身份验证的用户的数据。例如,点击此网站的url或,不点击任何
API,这是否意味着他们直接从前端的DB访问数据?掩盖API调用返回的数据如何?有没有标准的做法可以做到这一点,或者这一切都取决于这样一个事实,即您不应该返回您不希望有人在“网络”选项卡中偶然发现的数据?显然不是作为API端点的身份验证/授权的替代品,但他们不能登录我的应用程序,复制生成的令牌,然后在应用程序中使用该令牌调用我的API并仍然获取数据吗?@user1203497-是的。但既然你愿意让他们看到这些数据,那就没关系了。我的getUser函数的全部目的就是检索所有用户信息。之后,我可以简单地使用该功能获取用户信息,无论是设置页面,用户需要在其中查看信息,如仅供其查看的电子邮件,或具有名称等公共信息的用户公共配置文件。所以现在如果我使用Angular,我不能使用这么简单的方法,我必须基本上创建两个函数——一个用于私有数据,另一个用于公共数据。这两者本质上都在做相同的事情,只是其中一个只能检索经过身份验证的用户的数据。例如,点击这个网站url,或者不点击任何API,这是否意味着他们直接从前端的DB访问数据?掩盖API调用返回的数据如何?有没有标准的做法可以做到这一点,或者这一切都取决于这样一个事实,即您不应该返回您不希望有人在“网络”选项卡中偶然发现的数据?显然,作为另一方API端点的身份验证/授权的替代,您还可以阻止其他应用程序使用此端点。例如,如果您的用户在您的应用程序以外的应用程序中使用其令牌,您可以拒绝。但是它变得更高级了,所以现在,我认为您应该关注从其他用户那里保护您的端点。哦,真的吗?那么如何做到这一点呢?另一方面,您还可以阻止其他应用程序使用此端点。例如,如果您的用户在您的应用程序以外的应用程序中使用其令牌,您可以拒绝。但是它变得更高级了,所以现在,我认为您应该关注从其他用户那里保护您的端点。哦,真的吗?那你是怎么做到的?