【问题标题】:How do I make a http request to an api which needs an password without writing my password in my javascript code?如何向需要密码的 api 发出 http 请求,而无需在我的 javascript 代码中写入密码?
【发布时间】:2021-06-10 13:10:55
【问题描述】:

我有一个 Spring Boot 应用程序,它作为 api 工作。如果需要,它会从我的数据库返回 json 数据。现在我想运行一个网站,在其中使用从我的 api 接收到的数据。我想过使用 Spring Security 对想要获取我的数据的用户进行身份验证。在客户端,我知道的唯一解决方案是在我的 Javascript 文件中写入用于身份验证的用户名和密码并将其发送到 api。问题是,如果我运行该网站,每个人都可以阅读它。有没有其他解决方案来解决这个问题?

function req(method, url){
    var xmlhttp = new XMLHttpRequest();                     
    xmlhttp.open(method, url, false);`
    //And somehow also sent username and password here
    xmlhttp.send(); 
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        return JSON.parse(xmlhttp.responseText);
    }
}

【问题讨论】:

  • 永远不要将凭据存储在静态代码文件中。可以通过表单输入用户名/密码,然后使用jwt/cookie来管理认证和授权
  • 但是如果我使用jwt会不会一样。我的意思是我不必在我的代码中编写令牌吗?
  • 一旦您对用户进行身份验证,您的服务器将向客户端返回一个使用私钥签名的 JWT。您将把这个 jwt 保存在内存中(或保存在每次请求发送的 cookie 中)。您将在每个请求中包含 jwt,以便服务器可以对您进行身份验证。我对spring不太熟悉,所以我不能告诉你实现。但我确定有一些库可以在春季使用 jwt。 (所以你没有在代码中写任何敏感数据,只是在运行时将它存储在一个变量中)
  • 我的问题是,我不知道如何对用户进行身份验证。我想在我的代码中通过 url 调用 api,所以我必须在那里传递身份验证数据。但是怎么做?如果我写下我的用户名和密码,每个人都可以看到它们。
  • 您不会通过在代码中传递硬编码密码来访问需要身份验证的 API 端点。这就是您在应用程序中使用登录/身份验证表单的原因。您必须在运行时获取密码(使用表单),然后访问您的 api。您可以在您的应用中创建一个表单并自己处理身份验证,或者使用像谷歌这样的 OAuth 服务来为您完成。

标签: javascript spring security authentication xmlhttprequest


【解决方案1】:

您应该考虑使用另一种方法来保护您的 API,例如 JWT。这是一个很好的例子:https://dzone.com/articles/spring-boot-security-json-web-tokenjwt-hello-world

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2018-04-11
    • 2010-09-07
    • 2013-01-21
    • 1970-01-01
    • 2017-05-27
    相关资源
    最近更新 更多