blob: 3d4a5b5da6553436da6801971634dec02c5b902d [file] [log] [blame]
= MicroProfile JWT JWKs
:index-group: MicroProfile
:jbake-type: page
:jbake-status: published
Este é um exemplo de como usar MicroProfile JWT em TomEE usando a public key como JWKs.
== Executando a aplicação:
[source, bash]
----
mvn clean install tomee:run
----
Este exemplo é uma aplicação CRUD para produtos disponíveis.
== Requisitos e configuração
Para o uso do MicroProfile JWT, precisamos alterar o seguinte em nosso projeto:
[arabic]
. Adicione a dependência ao nosso arquivo `pom.xml`:
+
[source,xml]
----
<dependency>
<groupId>org.eclipse.microprofile.jwt</groupId>
<artifactId>microprofile-jwt-auth-api</artifactId>
<version>${mp-jwt.version}</version>
<scope>provided</scope>
</dependency>
----
. Anote nossa `Application.class` com `@LoginConfig(authMethod = "MP-JWT")`
. Forneça public key para validação do JWT. E especifique o local da public key e do emissor em nosso arquivo `microprofile-config.properties`. A public key é então usada para verificação da assinatura no diretório JWT.
+
[source,properties]
----
mp.jwt.verify.publickey.location=/jwks.pem
mp.jwt.verify.issuer=https://example.com
----
. Defina `@RolesAllowed()` nos pontos de extremidade que queremos proteger.
== Sobre a arquitetura do aplicativo
O aplicativo nos permite manipular e visualizar produtos com usuários específicos. Temos dois usuários: `Alice Wonder` e `John Doe`. Eles podem ler, criar, editar e excluir entradas específicas.
`jwt-john.json`
[source,json]
----
{
"iss": "https://example.com",
"sub": "24400320",
"name": "John Doe",
"upn": "john.doe@example.com",
"preferred_username": "john",
"groups": [
"guest", "admin"
]
}
----
== Acesse os endpoints com JWT token
Acessamos os endpoints de nossa classe de teste criando um `JWT` com a ajuda do nosso `TokenUtils.generateJWTString (String jsonResource, String keyId)` que assina nossos dados de usuário no formato json com a ajuda do nosso private key `src/test/resources/{keyId}` .
Também podemos gerar novos `privateKey.pem` e `publicKey.pem` com o método `GenerateKeyUtils.generateKeyPair (String keyAlgorithm, int keySize)` que cria o `publicKey.pem` também no formato` JWK`.