I finally got JWT Authentication working on Solr 8.1.1.
This is my security.json file contents
{
   "authentication":{
      "class":"solr.JWTAuthPlugin",
      "jwk":{
         "kty":"oct",
         "use":"sig",
         "kid":"k1",

 
"k":"xbQNocUhLJKSmGi0Qp_4hAVfls9CWH5WoTrw543WTXi5H6G-AXFlHRaTKWoGZtLKAD9jn6-MFC49jvR3bJI2L_H9a3yeRgd3tMkhxcR7ABsnhFz2WutN7NSZHiAxCJzTxR8YsgzMM9SXjvp6H1xpNWALdi67YIogKFTLiUIRDtdp3xBJxMP9IQlSYxK4ov81lt4hpAhSdkfpeczgRGd2xxrMbN38uDqtoIXSPRX-7d3pf1YvlyzWKHudTz30sjM6R2h-RRDBOp-SK_tDq4vjG72DyqFYt7BRyzSzrxGl-Ku5yURr21u6vep6suWeJ2_fmA8hgd304e60DBKZoFebxQ",
         "alg":"HS256"
      },
      "aud":"Solr"
   },
   "authorization":{
      "class":"solr.RuleBasedAuthorizationPlugin",
      "permissions":[
         {
            "name":"open_select",
            "path":"/select/*",
            "role":null
         },
         {
            "name":"all-admin",
            "collection":null,
            "path":"/*",
            "role":"admin"
         },
         {
            "name":"update",
            "role":"solr-update"
         }
      ],
      "user-role":{
         "admin":"solr-update"
      }
   }
}

I used the web site to generate the JWK key.

So I am using the "k" value from the JWK to sign the JWT token.

Initially, I used website
https://jwt.io/#debugger-io?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6InNvbHIiLCJleHAiOjk5MTYyMzkwMjJ9.rqMpVpTSbNUHDA7VLSYUpv4ebeMjvwQMD6hwMDpvcBQ

to generate the JWT and sign it with the value
xbQNocUhLJKSmGi0Qp_4hAVfls9CWH5WoTrw543WTXi5H6G-AXFlHRaTKWoGZtLKAD9jn6-MFC49jvR3bJI2L_H9a3yeRgd3tMkhxcR7ABsnhFz2WutN7NSZHiAxCJzTxR8YsgzMM9SXjvp6H1xpNWALdi67YIogKFTLiUIRDtdp3xBJxMP9IQlSYxK4ov81lt4hpAhSdkfpeczgRGd2xxrMbN38uDqtoIXSPRX-7d3pf1YvlyzWKHudTz30sjM6R2h-RRDBOp-SK_tDq4vjG72DyqFYt7BRyzSzrxGl-Ku5yURr21u6vep6suWeJ2_fmA8hgd304e60DBKZoFebxQ

The header is
{
  "alg": "HS256",
  "typ": "JWT"
}

and the payload is

{
  "sub": "admin",
  "aud": "Solr",
  "exp": 9916239022
}

This generates the JWT key of
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IlNvbHIiLCJleHAiOjk5MTYyMzkwMjJ9._H1qeNvlpIOn3X9IpDG0QiRWnEDXITMhZm1NMfuocSc

So when I use this JWT token generated https://jwt.io/  JWT authentication
is working, and I can authenticate as the user admin and Post data to the
Solr collections/cores.

Now we have decided to get the JWT token generated using Java before we
authenticate as the user admin to Post data to Solr, and to have a
calculated expiration date

Here is the Java Snippet for generating the JWT token

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
...
...
            String
key="xbQNocUhLJKSmGi0Qp_4hAVfls9CWH5WoTrw543WTXi5H6G-AXFlHRaTKWoGZtLKAD9jn6-MFC49jvR3bJI2L_H9a3yeRgd3tMkhxcR7ABsnhFz2WutN7NSZHiAxCJzTxR8YsgzMM9SXjvp6H1xpNWALdi67YIogKFTLiUIRDtdp3xBJxMP9IQlSYxK4ov81lt4hpAhSdkfpeczgRGd2xxrMbN38uDqtoIXSPRX-7d3pf1YvlyzWKHudTz30sjM6R2h-RRDBOp-SK_tDq4vjG72DyqFYt7BRyzSzrxGl-Ku5yURr21u6vep6suWeJ2_fmA8hgd304e60DBKZoFebxQ";
            Calendar cal =Calendar.getInstance();
            Date issueAt = cal.getTime();
            cal.add(Calendar.MINUTE,60);
            Date expDate = cal.getTime();
            String jws = Jwts.builder().
                setSubject("admin")
                .setAudience("Solr")
                .setExpiration(expDate)
                .signWith(SignatureAlgorithm.HS256,key).compact();
            System.out.println(jws);

This does not generate a valid JWT token, when I use it I am getting the
error message
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>Error 401 Signature invalid</title>
</head>

<body>
    <h2>HTTP ERROR 401</h2>
    <p>Problem accessing /solr/stores/update. Reason:
        <pre> Signature invalid</pre>
    </p>
</body>

</html>

I tried generating the JWT token using JavaScript from this codepen
https://codepen.io/tyrone-tse/pen/MWgzExB

and it too generates an invalid JWT key.

How come it works when the JWT is generated from
https://jwt.io/#debugger-io?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6InNvbHIiLCJleHAiOjk5MTYyMzkwMjJ9.rqMpVpTSbNUHDA7VLSYUpv4ebeMjvwQMD6hwMDpvcBQ







On Sat, Sep 14, 2019 at 9:06 AM Jan Høydahl <jan....@cominvent.com> wrote:

> See answer in other thread. JWT works for 8.1 or later, don’t attempt it
> in 7.x.
>
> You could try to turn on debug logging for or.apache.solr.security to get
> more logging.
>
> Jan Høydahl
>
> > 13. sep. 2019 kl. 00:24 skrev Tyrone Tse <tyrone...@hotmail.com>:
> >
> > Jan
> >
> > I tried using the JWT Plugin https://github.com/cominvent/solr-auth-jwt
> >
> > If my security.json file is
> >
> > {
> >  "authentication": {
> >    "class":"com.cominvent.solr.JWTAuthPlugin",
> >        "jwk" : {
> >                "kty": "oct",
> >                "use": "sig",
> >                "kid": "solr",
> >                "k":
> >
> "pIpVnjhuAj9DBg8e2lwya7o_uZMM3Wqo2eK0uchOza0vBS-orZNYTkLcHTLXF9JaCBR08tWfFEWVPENF6sXKuaj8Mn65Kc3QUmS-csblVvjj69dXk2Mi-Zs2iDDM3QyyvdiyRpfxE-xKwwjhU47xs7M0Dq69I1UE5nrFkczLf9qe3b47ha3eBQDm1_zg8EVwxadJ7gfQ97jn2MtT6hHrts9YD6_Z_heAdYC2QYjBBIdEXzZgHSKqmPNNhDvAChF9AfmNiUlfAG_g0jMMLKYEUv6ck3KJA6A1JBq1iEstjvF7hchFgdgyVRCR5P8UM6n6Hb0YrHjjANyEYIZD9mFfBQ",
> >                "alg": "HS256"
> >                }
> >  }
> > }
> >
> > And my JWT token has the properties Header {
> >  "alg": "HS256",
> >  "typ": "JWT"
> > } Payload {
> >  "sub": "admin",
> >  "name": "admin",
> >  "iat": 1516239022
> > } What other parameters do I need to add to the security.json file to
> > secure Solr 7.2 ? I don't want anyone being able to access it without
> using
> >
> > curl -H "Authorization : Bearer <jwt-token>"
> > http://localhost:8983/solr/admin/info
> >
> >
> >
> > Thanks Tyrone
> >
> >
> >
> >> On Tue, Sep 10, 2019 at 2:18 PM Tyrone Tse <tyrone...@hotmail.com>
> wrote:
> >>
> >> All I could see in the solr.log was ( could it be the java version ?)
> >>
> >>
> main{ExitableDirectoryReader(UninvertingDirectoryReader(Uninverting(_0(8.2.0):C1:[diagnostics={java.vendor=Oracle
> >> Corporation, os=Mac OS X, java.version=1.8.0_60,
> java.vm.version=25.60-b23,
> >> lucene.version=8.2.0, os.arch=x86_64, java.runtime.version=1.8.0_60-b27,
> >> source=flush, os.version=10.12.6,
> >>
> timestamp=1568127993644}]:[attributes={Lucene50StoredFieldsFormat.mode=BEST_SPEED}])))}
> >> 2019-09-10 19:16:02.312 WARN  (qtp875016237-24) [   ]
> >> o.a.s.s.JWTAuthPlugin Authentication failed.
> >>
> >> On Tue, Sep 10, 2019 at 12:38 PM Jan Høydahl <jan....@cominvent.com>
> >> wrote:
> >>
> >>> Please check the error message in solr.log on the server side and paste
> >>> that here. Could be a bug 🕷
> >>>
> >>> Jan Høydahl
> >>>
> >>>> 10. sep. 2019 kl. 18:51 skrev Tyrone Tse <tyrone...@hotmail.com>:
> >>>>
> >>>> Jan using https://mkjwk.org/
> >>>> I generated the following JWK
> >>>>
> >>>> {
> >>>>
> >>>> "kty": "oct",
> >>>> "use": "sig",
> >>>> "kid": "solr",
> >>>> "k":
> >>>
> "pIpVnjhuAj9DBg8e2lwya7o_uZMM3Wqo2eK0uchOza0vBS-orZNYTkLcHTLXF9JaCBR08tWfFEWVPENF6sXKuaj8Mn65Kc3QUmS-csblVvjj69dXk2Mi-Zs2iDDM3QyyvdiyRpfxE-xKwwjhU47xs7M0Dq69I1UE5nrFkczLf9qe3b47ha3eBQDm1_zg8EVwxadJ7gfQ97jn2MtT6hHrts9YD6_Z_heAdYC2QYjBBIdEXzZgHSKqmPNNhDvAChF9AfmNiUlfAG_g0jMMLKYEUv6ck3KJA6A1JBq1iEstjvF7hchFgdgyVRCR5P8UM6n6Hb0YrHjjANyEYIZD9mFfBQ",
> >>>> "alg": "HS256"
> >>>> }
> >>>>
> >>>> So I put the generated JWK into my solr server security.json file like
> >>> this
> >>>>
> >>>> {
> >>>> "authentication": {
> >>>>   "class":"solr.JWTAuthPlugin",
> >>>>   "blockUnknown": true,
> >>>>   "jwk" : {
> >>>>         "kty": "oct",
> >>>>         "use": "sig",
> >>>>         "kid": "solr",
> >>>>         "k":
> >>>
> "pIpVnjhuAj9DBg8e2lwya7o_uZMM3Wqo2eK0uchOza0vBS-orZNYTkLcHTLXF9JaCBR08tWfFEWVPENF6sXKuaj8Mn65Kc3QUmS-csblVvjj69dXk2Mi-Zs2iDDM3QyyvdiyRpfxE-xKwwjhU47xs7M0Dq69I1UE5nrFkczLf9qe3b47ha3eBQDm1_zg8EVwxadJ7gfQ97jn2MtT6hHrts9YD6_Z_heAdYC2QYjBBIdEXzZgHSKqmPNNhDvAChF9AfmNiUlfAG_g0jMMLKYEUv6ck3KJA6A1JBq1iEstjvF7hchFgdgyVRCR5P8UM6n6Hb0YrHjjANyEYIZD9mFfBQ",
> >>>>         "alg": "HS256"
> >>>>       }
> >>>> }
> >>>> }
> >>>>
> >>>> Then I went to https://jwt.io/ to generate the JWT using the value of
> >>>> "k":
> >>>
> "pIpVnjhuAj9DBg8e2lwya7o_uZMM3Wqo2eK0uchOza0vBS-orZNYTkLcHTLXF9JaCBR08tWfFEWVPENF6sXKuaj8Mn65Kc3QUmS-csblVvjj69dXk2Mi-Zs2iDDM3QyyvdiyRpfxE-xKwwjhU47xs7M0Dq69I1UE5nrFkczLf9qe3b47ha3eBQDm1_zg8EVwxadJ7gfQ97jn2MtT6hHrts9YD6_Z_heAdYC2QYjBBIdEXzZgHSKqmPNNhDvAChF9AfmNiUlfAG_g0jMMLKYEUv6ck3KJA6A1JBq1iEstjvF7hchFgdgyVRCR5P8UM6n6Hb0YrHjjANyEYIZD9mFfBQ",
> >>>>
> >>>> for the secret key
> >>>>
> >>>> My JWT header
> >>>> {
> >>>> "alg": "HS256",
> >>>> "typ": "JWT"
> >>>> }
> >>>>
> >>>> Payload
> >>>>
> >>>> {
> >>>> "sub": "1234567890",
> >>>> "name": "John Doe",
> >>>> "iat": 1516239022
> >>>> }
> >>>>
> >>>> Secret key
> >>>>
> >>>
> pIpVnjhuAj9DBg8e2lwya7o_uZMM3Wqo2eK0uchOza0vBS-orZNYTkLcHTLXF9JaCBR08tWfFEWVPENF6sXKuaj8Mn65Kc3QUmS-csblVvjj69dXk2Mi-Zs2iDDM3QyyvdiyRpfxE-xKwwjhU47xs7M0Dq69I1UE5nrFkczLf9qe3b47ha3eBQDm1_zg8EVwxadJ7gfQ97jn2MtT6hHrts9YD6_Z_heAdYC2QYjBBIdEXzZgHSKqmPNNhDvAChF9AfmNiUlfAG_g0jMMLKYEUv6ck3KJA6A1JBq1iEstjvF7hchFgdgyVRCR5P8UM6n6Hb0YrHjjANyEYIZD9mFfBQ
> >>>>
> >>>> Which generates the following encoded JWT
> >>>>
> >>>
> eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.ZdtjglSME79nlq5HJs0bUYiFkSlDKytKS07IMWz9o44
> >>>>
> >>>>
> >>>> So I then tried to use the JWT encoded value in a curl command to Solr
> >>>> as follows
> >>>>
> >>>> curl -H "Authorization: Bearer
> >>>>
> >>>
> eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.ZdtjglSME79nlq5HJs0bUYiFkSlDKytKS07IMWz9o44"
> >>>> http://localhost:8983/solr/admin/info/system
> >>>>
> >>>> I get the error message
> >>>>
> >>>> <html>
> >>>> <head>
> >>>> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
> >>>> <title>Error 401 JWT validation failed</title>
> >>>> </head>
> >>>> <body><h2>HTTP ERROR 401</h2>
> >>>> <p>Problem accessing /solr/admin/info/system. Reason:
> >>>> <pre>    JWT validation failed</pre></p>
> >>>> </body>
> >>>> </html>
> >>>>
> >>>>
> >>>> Am I missing something in my security.json file ?
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>> On Tue, Sep 10, 2019 at 5:30 AM Jan Høydahl <jan....@cominvent.com>
> >>> wrote:
> >>>>>
> >>>>> I think you are confusing JWK with the JWT token. JWK is only for
> >>> defining
> >>>>> the key, see https://mkjwk.org for an online JWK generator, you can
> >>>>> choose HS256 as algorithm. Put the generated JWK in Solr's config and
> >>> also
> >>>>> use the generated key to sign your JWT. Then Solr should be able to
> >>>>> validate the JWT.
> >>>>>
> >>>>> --
> >>>>> Jan Høydahl, search solution architect
> >>>>> Cominvent AS - www.cominvent.com
> >>>>>
> >>>>>> 10. sep. 2019 kl. 01:21 skrev Tyrone <tyrone....@gmail.com>:
> >>>>>>
> >>>>>> Jan
> >>>>>>
> >>>>>> Can my jwk object be something like
> >>>>>>
> >>>>>> {alg": "HS256", "typ": "JWT",
> >>>>>>
> >>>>>> "sub": "1234567890", "name": "John Doe", "iat": 1516239022,
> >>>>>>
> >>>>>> “k" : "secret-key"}
> >>>>>>
> >>>>>> Where k is the JWT secret key?
> >>>>>>
> >>>>>>
> >>>>>> Sent from my iPhone
> >>>>>>
> >>>>>>> On Sep 9, 2019, at 1:48 AM, Jan Høydahl <jan....@cominvent.com>
> >>> wrote:
> >>>>>>>
> >>>>>>> In your security.json, add a JWK matching your signing algorithm,
> >>> using
> >>>>> the “jwk” JSON key.
> >>>>>>>
> >>>>>>> Example:
> >>>>>>> “jwk” : { "kty" : "oct", "kid" :
> >>>>> "0afee142-a0af-4410-abcc-9f2d44ff45b5", "alg" : "HS256", "k" :
> >>>>> "FdFYFzERwC2uCBB46pZQi4GG85LujR8obt-KWRBICVQ" }
> >>>>>>>
> >>>>>>> Of course you need to find a way to encode your particular secret
> in
> >>>>> jwk format, there should be plenty of tools available for that. If
> you
> >>>>> intend to use symmetric key in prod you have to configure solr so
> that
> >>>>> security.json is not readable for anyone but the admin!
> >>>>>>>
> >>>>>>> Jan Høydahl
> >>>>>>>
> >>>>>>>> 9. sep. 2019 kl. 05:46 skrev Tyrone <tyrone....@gmail.com>:
> >>>>>>>>
> >>>>>>>> HS256
> >>>>>
> >>>>>
> >>>
> >>
>

Reply via email to