Preloader image

Este é um exemplo de como usar o MicroProfile JWT no TomEE, acessando o Principal no JsonWebToken.

Executando a aplicação:

mvn clean install tomee:run

Este exemplo é uma aplicação CRUD para pedidos na loja.

Requisitos e configuração

Para o uso do MicroProfile JWT, precisamos alterar o seguinte em nosso projeto:

  1. Adicione a dependência ao nosso arquivo pom.xml:

    <dependency>
        <groupId>org.eclipse.microprofile.jwt</groupId>
        <artifactId>microprofile-jwt-auth-api</artifactId>
        <version>${mp-jwt.version}</version>
        <scope>provided</scope>
    </dependency>
  2. Anote nossa Application.class com @LoginConfig(authMethod = "MP-JWT")

  3. Forneça public and private key para autenticação. E especifique a localização da public key e do issuer no nosso arquivo microprofile-config.properties.

    mp.jwt.verify.publickey.location=/publicKey.pem
    mp.jwt.verify.issuer=https://example.com
  4. Defina @RolesAllowed() nos endpoints que queremos proteger.

Obtenção do JWT Principal

Obtemos o Principal na classe MicroProfile org.eclipse.microprofile.jwt.JsonWebToken. De lá podemos adquirir o nome de usuário e os grupos do usuário que está acessando o endpoint.

@Inject
private JsonWebToken jwtPrincipal;

Sobre a arquitetura da aplicação

A aplicação nos permite manipular pedidos com usuários específicos. Temos dois usuários: Alice Wonder e John Doe. Eles podem ler, criar, editar e excluir entradas específicas. E para cada criação, salvamos o usuário que criou o pedido. Caso um usuário edite a entrada, registramos que, acessando o Principal que enviou a solicitação ao nosso back-end.

alice-wonder-jwt.json

{
  "iss": "https://example.com",
  "upn": "alice",
  "sub": "alice.wonder@example.com",
  "name": "Alice Wonder",
  "iat": 1516239022,
  "groups": [
    "buyer"
  ]
}

john-doe-jwt.json

{
  "iss": "https://example.com",
  "upn": "john",
  "sub": "john.doe@example.com",
  "name": "John Doe",
  "iat": 1516239022,
  "groups": [
    "merchant"
  ]
}

Acesse os endpoints com JWT token

Acessamos os endpoints da nossa classe de teste criando um JWT com a ajuda do nosso TokenUtils.generateJWTString(String jsonResource), que assina nossos dados do usuário no formato json com a ajuda do nossa chave src/test/resources/privateKey.pem.

Também podemos gerar o novo privateKey.pem e publicKey.pem com o método GenerateKeyUtils.generateKeyPair(String keyAlgorithm, int keySize). == APIs Used