简体   繁体   English

Java:从yaml配置文件读取公共密钥时出现问题

[英]Java: Problems reading a public key from a yaml config file

I have a yaml config file which stores a rsa public key 我有一个存储rsa公钥的yaml配置文件

http_authenticator:
          type: jwt
          challenge: false
          config:
            signing_key: >
                  -----BEGIN PUBLIC KEY-----
                  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApJubKdzjmxriryviTEPN
                  85qX8SzcDbseBjJXJzrt3Xn0mk7+7ZxWDnB5Qh/TvZoHGOcaVeoRIzBi1AdX20az
                  x7oAzfMLI48sDEptwJgd87Mg6UmvXlPOkvRypUSP8pFrOUg+aQ75qRsQkXBBWMIO
                  qBZiDXVrMHY1+Q1LOJR1aWFjIlL1WNZecTNJ9UfPhjxW7WJRmI3/EXPbD/OEeC7J
                  mD/nifofYUQUavggcirKI0KM17ENLdyZy3aWfpKOXqZJByfbp5AXmWoWcNZqsiHy
                  KL/sK/nmX86jwKRHvIOQv9IBlPCNSxNr6IQox/BHqZssvY2J65UHOaTJ408x7IQT
                  FQIDAQAB
                  -----END PUBLIC KEY-----
            jwt_header: "Authorization"
            jwt_url_parameter: null
            cookieName: "Cookie"
            cookieHeaderName: "jwt_token"

and I can access it like this: String signingKey = settings.get("signing_key"); 我可以这样访问它: String signingKey = settings.get("signing_key");

When I try to validate a JWT token using that public key it throws a InvalidKeyException . 当我尝试使用该公钥验证JWT令牌时,它将引发InvalidKeyException

However if I hardcode the string in my code like this, it works! 但是,如果我这样在代码中对字符串进行硬编码,则可以正常工作!

String signingKey = "-----BEGIN PUBLIC KEY-----\n" +
                    "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApJubKdzjmxriryviTEPN\n" +
                    "85qX8SzcDbseBjJXJzrt3Xn0mk7+7ZxWDnB5Qh/TvZoHGOcaVeoRIzBi1AdX20az\n" +
                    "x7oAzfMLI48sDEptwJgd87Mg6UmvXlPOkvRypUSP8pFrOUg+aQ75qRsQkXBBWMIO\n" +
                    "qBZiDXVrMHY1+Q1LOJR1aWFjIlL1WNZecTNJ9UfPhjxW7WJRmI3/EXPbD/OEeC7J\n" +
                    "mD/nifofYUQUavggcirKI0KM17ENLdyZy3aWfpKOXqZJByfbp5AXmWoWcNZqsiHy\n" +
                    "KL/sK/nmX86jwKRHvIOQv9IBlPCNSxNr6IQox/BHqZssvY2J65UHOaTJ408x7IQT\n" +
                    "FQIDAQAB\n" +
                    "-----END PUBLIC KEY-----";

How do I make sure the yaml config behaves the same way as the hardcoded one? 如何确保yaml配置的行为与硬编码的行为相同?

Fairly sure using the ">" in YAML will get you a bunch of lines concatenated with spaces instead of the line feed, you might want to print out the key you obtain to see what you actually get. 可以肯定的是,在YAML中使用“>”将使您得到一堆由空格而不是换行符代替的行,您可能希望打印出获得的密钥以查看实际获得的密钥。

If that is the case you can apply a replaceAll to get back the result that you expect. 在这种情况下,您可以应用replaceAll来获取期望的结果。

http://yaml.org/spec/1.2/spec.html#id2760844 http://yaml.org/spec/1.2/spec.html#id2760844

Use the literal block scalar style | 使用文字块标量样式| instead of the folded > : 而不是折叠的>

        signing_key: |
              -----BEGIN PUBLIC KEY-----
              MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApJubKdzjmxriryviTEPN
              85qX8SzcDbseBjJXJzrt3Xn0mk7+7ZxWDnB5Qh/TvZoHGOcaVeoRIzBi1AdX20az
              x7oAzfMLI48sDEptwJgd87Mg6UmvXlPOkvRypUSP8pFrOUg+aQ75qRsQkXBBWMIO
              qBZiDXVrMHY1+Q1LOJR1aWFjIlL1WNZecTNJ9UfPhjxW7WJRmI3/EXPbD/OEeC7J
              mD/nifofYUQUavggcirKI0KM17ENLdyZy3aWfpKOXqZJByfbp5AXmWoWcNZqsiHy
              KL/sK/nmX86jwKRHvIOQv9IBlPCNSxNr6IQox/BHqZssvY2J65UHOaTJ408x7IQT
              FQIDAQAB
              -----END PUBLIC KEY-----

That will preserve the linebreaks. 这样可以保留换行符。 See also the link @clement posted. 另请参阅链接@clement。

For an overview of quoting styles, you might want to read this article: http://blogs.perl.org/users/tinita/2018/03/strings-in-yaml---to-quote-or-not-to-quote.html 有关引用样式的概述,您可能需要阅读这篇文章: http : //blogs.perl.org/users/tinita/2018/03/strings-in-yaml---to-quote-or-not-to -quote.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM