【问题标题】:REST API Security for access only to API [closed]仅用于访问 API 的 REST API 安全性 [关闭]
【发布时间】:2020-02-06 15:19:45
【问题描述】:

我的 Spring Boot 应用程序几乎完成了,还剩下一个问题。我需要实施安全部分。我只想通过请求附带的密钥访问 api。在 URL 字符串、消息正文或标题中。它现在不计量。我发现了很多不同的方法,但他们使用登录:密码对,这对我来说并不有趣。每条消息都必须包含 KEY。 它应该看起来像

URL 字符串(获取方法)

https://api.domen.com/news/today?key='somekey'&'some filters'

正文(Post 方法)

https://api.domen.com/news/today?'some filters'
{
    "key": "somekey",
    ...
}

有没有建议如何只使用密钥并进行验证?

【问题讨论】:

    标签: spring-boot api spring-security key


    【解决方案1】:

    我会在 HTTP 授权标头中包含令牌与承载模式(而不是使用参数),这是一个很好的做法

    POST /news/today?p=1 HTTP/1.1
    Authorization: Bearer 123456
    

    如果你想依赖 JTW(又是一个标准实践)你需要验证传入的令牌,这是一个使用 jsonwebtoken 库的示例

     Claims claims = Jwts.parser()
            .setSigningKey(DatatypeConverter.parseBase64Binary("SECRET"))
            .parseClaimsJws(jwt).getBody();
    
     String subject = claims.getBody().getSubject(); // subject  in the token
     Date date = claims.getBody().getExpiration(); // expiration of the token
    

    上面的示例假设令牌(设置在 HTTP 标头上)已使用相同的密钥“SECRET”进行签名

    //We will sign our JWT with our ApiKey secret
    byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("SECRET");
    Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
    
    //Let's set the JWT Claims
    JwtBuilder builder = Jwts.builder().setId(id)
            .setIssuedAt(now)
            .setSubject("subj")
            .setIssuer("issuer")
            .signWith(signatureAlgorithm, signingKey);
    

    这是一个很好的参考https://developer.okta.com/blog/2018/10/31/jwts-with-java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-14
      • 2012-12-29
      • 2015-09-08
      • 2015-05-06
      • 2014-04-23
      • 2012-06-16
      • 2021-02-24
      • 1970-01-01
      相关资源
      最近更新 更多