Микропрофиль JWT Keycloack. 401 Несанкционированный - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь следовать этому уроку jwt plus keycloack hello world , чтобы авторизовать мои остальные конечные точки с помощью JWT-микропрофиля и keycloack.

Прежде всего, я настроил keycloack. Я создал группы, роли, сопоставил роли, поэтому, когда я делаю запрос от почтальона к http://localhost:8080/auth/realms/public/protocol/openid-connect/token, в разделе токена доступа, я получаю следующий токен (отформатированный из jwt.io):

{
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJTelY5d3J3aGtid1ZHS1drSGd2V2N4SXFNM2pMaGliUGI5cG5LWEdudWxNIn0.eyJqdGkiOiJiZWMyZjM4Zi1jNzVlLTQ1NDctYTVmNy1mOGI4MWQwYjI5YmQiLCJleHAiOjE1NzA5NjAxNTEsIm5iZiI6MCwiaWF0IjoxNTcwOTU5ODUxLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvcHVibGljIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjFhZWM1YWJmLTk2OWUtNGM0NS1hMzJjLTNhZmY3ZDcyZjk2YSIsInR5cCI6IkJlYXJlciIsImF6cCI6Im1pY3JvcHJvZmlsZS1qd3QtY2xpZW50IiwiYXV0aF90aW1lIjowLCJzZXNzaW9uX3N0YXRlIjoiMmRiNWRmZWYtNWFiZC00NTYwLWIyNjUtOTg5MGM3Y2Q2YWU2IiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJteXNpbXBsZXJvbGUiLCJyb2xlMSIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImdyb3VwcyI6WyJteXNpbXBsZXJvbGUiLCJyb2xlMSIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXSwicHJlZmVycmVkX3VzZXJuYW1lIjoibWljcm9wcm9maWxlLWp3dC11c2VyIn0.MOE-a2koGFDiOb3MuPGXkPu9YyawC4ZpvsrCsgWXKN71GZWKBaF-EXcA1V05YNniRdo4qoYzIfJFSzTJgEIWF3La3ft_I0D-huv3i7Vgw-bafLvfVwkRZlUHbxZfJoWVl-O7NmDFWS4Z9O8YQzkhqEXYFJTejDmR_fbd5FNzGLxZ4EyFMT8ViR-j9bWIdTN50_KiauKPsEpY0vzZ5-YZaQXqvDusa1Xj2eYR2X-d2cWMUgLetArSONxjaDalg-5aqmVKhJMZsMiRLW0Cxh5-FhqnTipvAbTiKLVuBurFPAE0nPhgnzWjSIzA6uNLWFLsrox7p7sZg_TUrMrkdKjXNg",
    "expires_in": 300,
    "refresh_expires_in": 1800,
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1OTQxZjZkNS0yMjQ1LTQ4YTQtODJhNy1iMjM1MjM5NmFmYTQifQ.eyJqdGkiOiJhYjVhZTQ0Mi0wOWZkLTQ5ZDEtOGUzYS0wOWE2ODA1ODk4MDIiLCJleHAiOjE1NzA5NjE2NTEsIm5iZiI6MCwiaWF0IjoxNTcwOTU5ODUxLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvcHVibGljIiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL3B1YmxpYyIsInN1YiI6IjFhZWM1YWJmLTk2OWUtNGM0NS1hMzJjLTNhZmY3ZDcyZjk2YSIsInR5cCI6IlJlZnJlc2giLCJhenAiOiJtaWNyb3Byb2ZpbGUtand0LWNsaWVudCIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjJkYjVkZmVmLTVhYmQtNDU2MC1iMjY1LTk4OTBjN2NkNmFlNiIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJteXNpbXBsZXJvbGUiLCJyb2xlMSIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUifQ.n6C-7ivJkKlmGo9PBt1GXyiXS3VFcxbozjcUcjYGRH8",
    "token_type": "bearer",
    "not-before-policy": 0,
    "session_state": "2db5dfef-5abd-4560-b265-9890c7cd6ae6",
    "scope": "email profile"
}

Раздел токена доступа, отформатированный из jwt.io:

{
  "jti": "ce5e517e-549d-4bbe-8c00-790356e765cc",
  "exp": 1570958586,
  "nbf": 0,
  "iat": 1570958286,
  "iss": "http://localhost:8080/auth/realms/public",
  "aud": "account",
  "sub": "1aec5abf-969e-4c45-a32c-3aff7d72f96a",
  "typ": "Bearer",
  "azp": "microprofile-jwt-client",
  "auth_time": 0,
  "session_state": "a5a3ee14-f6fe-4972-a350-852dccb90a27",
  "acr": "1",
  "realm_access": {
    "roles": [
      "mysimplerole",
      "role1",
      "offline_access",
      "uma_authorization"
    ]
  },
  "resource_access": {
    "account": {
      "roles": [
        "manage-account",
        "manage-account-links",
        "view-profile"
      ]
    }
  },
  "scope": "email profile",
  "email_verified": false,
  "groups": [
    "mysimplerole",
    "role1",
    "offline_access",
    "uma_authorization"
  ],
  "preferred_username": "microprofile-jwt-user"
}

В моем проекте есть следующие файлы:

JAXRSConfiguration.java

package com.airhacks;
  2 
  3 import javax.annotation.security.DeclareRoles;
  4 
  5 import javax.ws.rs.ApplicationPath;
  6 import javax.ws.rs.core.Application;
  7 
  8 import org.eclipse.microprofile.auth.LoginConfig;
  9 
 10 /**
 11  * Configures a JAX-RS endpoint. Delete this class, if you are not exposing
 12  * JAX-RS resources in your application.
 13  *
 14  * @author airhacks.com
 15  */
 16 @ApplicationPath("resources")
 17 @LoginConfig(authMethod="MP-JWT")
 18 @DeclareRoles({ "mysimplerole", "USER" })
 1 public class JAXRSConfiguration extends Application {}

PingResource.java

 1 package com.airhacks.ping.boundary;
  2                            
  3 import javax.annotation.security.PermitAll;
  4 import javax.annotation.security.RolesAllowed;
  5 
  6 import javax.inject.Inject;
  7 
  8 import javax.ws.rs.GET;    
  9 import javax.ws.rs.Path;   
 10 
 11 import org.eclipse.microprofile.config.inject.ConfigProperty;
 12 
 13 /**
 14  *
 15  * @author airhacks.com
 16  */
 17 @Path("ping")
 18 public class PingResource {
 19 
 20     //@Inject
 21     //@ConfigProperty(name = "message")
 22     String message;    
 23 
 24     @GET
 25     @RolesAllowed("mysimplerole")
 26     //@PermitAll
 27     public String ping() {
 28         return "Jakarta EE with MicroProfile 2+!";
 29     }
 30 
 31 }
~         

microprofile-config.properties

 -- message=Enjoy
 mp.jwt.verify.publickey.location=http://localhost:8080/auth/realms/public/protocol/openid-connect/certs
 mp.jwt.verify.issuer=http://localhost:8080/auth/realms/public

Я попытался вставить в свойство mp.jwt.verify.issuer непосредственно необработанный токен, но все еще не авторизованный. Я не знаю, чего не хватает.

...