【问题标题】:How do I hide a Spring Boot "GET" API request from the public in a browser?如何在浏览器中向公众隐藏 Spring Boot“GET”API 请求?
【发布时间】:2021-11-26 22:30:14
【问题描述】:

正如问题所述,我的目标是隐藏 Spring Boot 中的 GET 路由,使其不被公众访问。我最初采用了 CORS 方法,但这并不能解决实际的 view 问题。几乎任何人都可以去,比如说...https://my-api-url.com/employee/all,然后查看我数据库中所有员工的 JSON 记录。

最终目标:我只希望我的前端能够访问我的 API,以便向已登录的授权用户显示该信息,但我不希望任何人都能访问API。 CORS 策略可以处理 ajax 请求,但我似乎无法停止对 GET url 的整体查看。

我该如何解决这个问题?

【问题讨论】:

  • 嗨马修,也许我误解了你在找什么。我的建议是你最好看看设计了这种情况的spring security。
  • 您好!我的目标是允许 CORS 从我的 API 访问数据,但我不希望直接从该 API 调用在浏览器中查看 API 数据。 Spring security 对很多事情都很有效,但是我还没有发现任何可以阻止直接查看浏览器中的请求的东西。即......我不想去localhost:9000/employee/all并在API路由上查看响应。

标签: java spring spring-boot model-view-controller hide


【解决方案1】:

您可以使用 OAuth 来注册可以访问您的资源服务器的客户端(前端/邮递员/您用来测试 API 的任何东西),但这可能有点矫枉过正。目前,如果您担心有人可以通过在地址栏中输入来查看您的 API(如果这是您的问题),那么您可以只允许经过身份验证的用户访问。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

如果您想限制使用并使滥用者不方便调用您的 API,您可以在页面加载时发出一个令牌(CSRF 令牌)并要求该令牌出现在对 API 的请求中 - 这样 API可以从启动页面加载的浏览器调用。

你可以参考这个链接https://security.stackexchange.com/questions/246434/how-can-i-ensure-my-api-is-only-called-by-my-client

【讨论】:

    【解决方案3】:

    如果您的前端当前正在处理身份验证,我建议您使用 Springs Authenticationserice。这样您就可以防止未经身份验证的用户访问该特定 API 端点。

    【讨论】:

    • 不幸的是,这并不能完全解决问题。我的前端尚未构建,但我可以很好地处理 cors 方面。我不希望用户访问我的 API URL 并在他们的浏览器中看到 JSON 响应。这样,唯一可以检索数据的地方是我的前端,用户被拒绝查看对 URL 的访问。
    • 在这种情况下,我很难理解您要做什么。我假设您将使用 Spring 作为后端并创建一个 API,人们可以在其中访问端点并获取/发布 JSON 数据。我理解正确吗?无论如何,我看不到您如何在浏览器中看到任何内容。或者您是否使用 API 自动文档工具来测试您的网络端点?如果您正在使用自动 API 文档功能,则可以使用简单的注释忽略 api 端点。
    • 或者,再次使用 Authentication 在访问端点时要求 Token,它还会在 API 文档工具上发回“未授权”。
    • 顺便说一句:如果您使用 API 文档来测试您的应用程序,我建议您使用外部程序(例如 Postman)来测试您的 API。这样你就灵活多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2020-10-10
    • 2016-03-06
    相关资源
    最近更新 更多