Repository: quarkusio/quarkus
Issue: Quarkus OIDC Client unable to retrieve access-token

## Describe the bug
I am using quarkus-oidc-client extension to obtain token. The idea is to send client-id, client-secret and grant-type to OpenID connect provider to obtain access token. I am referring to this doc @ https://quarkus.io/guides/security-openid-connect-client
I am using annotation "@OidcClientFilter" on a resource annotated using "@RegisterRestClient". 
The OidcClient is not able to retrieve access-token as it sends only grant_type=client_credentials to the OAuth server.

I have configured the extension with following configuration
```
quarkus.oidc-client.auth-server-url=https://openid-provider.org 
quarkus.oidc-client.discovery-enabled=false
quarkus.oidc-client.token-path=/token
quarkus.oidc-client.client-id=rf3ScIceRGbm8IShjMUDUY67INhJEGRb
quarkus.oidc-client.credentials.secret=************
#quarkus.oidc.authentication.scopes=EMAIL
```

### Expected behavior
OidcClient should sent HTTP post request with form having parameters "client_id", "client_secret", "grant_type" and "scopes".
The response should be a HTTP 200 from OAuth server as following:
{
"access_token": "",
"token_type": "",
"expires_in": "",
"issued_at": ""
}

Please refer to OAuth2 token response @ https://developer.okta.com/docs/reference/api/oidc/#request-example

### Actual behavior
As OidcClient is NOT sending client_id and client_secret, OAuth server is returning following error:

Caused by: io.quarkus.oidc.client.OidcClientException: 
                {  
                        "error":"invalid_client",
                        "error_description":"missing or invalid client_id or client_secret"
                }


## To Reproduce

Link to a small reproducer (preferably a Maven project if the issue is not Gradle-specific).

Or attach an archive containing the reproducer to the issue.

Steps to reproduce the behavior:
1. 
2. 
3. 

### Configuration
```properties
# Add your application.properties here, if applicable.
quarkus.oidc-client.auth-server-url=https://openid-provider.org
quarkus.oidc-client.discovery-enabled=false
quarkus.oidc-client.token-path=/token
quarkus.oidc-client.client-id=rf3ScIceRGbm8IShjMUDUY67INhJEGRb
quarkus.oidc-client.credentials.secret=************
quarkus.oidc.authentication.scopes=EMAIL
```

### Screenshots
(If applicable, add screenshots to help explain your problem.)

## Environment (please complete the following information):
Ubuntu 18 LTS

### Output of `uname -a` or `ver`
Linux inggou18 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

### Output of `java -version`
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment GraalVM CE 20.1.0 (build 11.0.7+10-jvmci-20.1-b02)
OpenJDK 64-Bit Server VM GraalVM CE 20.1.0 (build 11.0.7+10-jvmci-20.1-b02, mixed mode, sharing)

### GraalVM version (if different from Java)

### Quarkus version or git rev
1.13.7

### Build tool (ie. output of `mvnw --version` or `gradlew --version`)
Maven 3.6.6

## Additional context
(Add any other context about the problem here.)


Changed files:
extensions/oidc-client/runtime/src/main/java/io/quarkus/oidc/client/runtime/OidcClientImpl.java
integration-tests/oidc-client-wiremock/src/test/java/io/quarkus/it/keycloak/KeycloakRealmResourceManager.java

diff --git a/extensions/oidc-client/runtime/src/main/java/io/quarkus/oidc/client/runtime/OidcClientImpl.java b/extensions/oidc-client/runtime/src/main/java/io/quarkus/oidc/client/runtime/OidcClientImpl.java
index de8fa0f2ec8..63bf8b98052 100644
--- a/extensions/oidc-client/runtime/src/main/java/io/quarkus/oidc/client/runtime/OidcClientImpl.java
+++ b/extensions/oidc-client/runtime/src/main/java/io/quarkus/oidc/client/runtime/OidcClientImpl.java
@@ -120,9 +120,11 @@ private Tokens emitGrantTokens(HttpResponse<Buffer> resp, boolean refresh) {
             JsonObject json = resp.bodyAsJsonObject();
             final String accessToken = json.getString(oidcConfig.grant.accessTokenProperty);
             final String refreshToken = json.getString(oidcConfig.grant.refreshTokenProperty);
+            final Object expiresInValue = json.getValue(oidcConfig.grant.expiresInProperty);
             Long accessTokenExpiresAt;
-            Long accessTokenExpiresIn = json.getLong(oidcConfig.grant.expiresInProperty);
-            if (accessTokenExpiresIn != null) {
+            if (expiresInValue != null) {
+                long accessTokenExpiresIn = expiresInValue instanceof Number ? ((Number) expiresInValue).longValue()
+                        : Long.parseLong(expiresInValue.toString());
                 accessTokenExpiresAt = Instant.now().getEpochSecond() + accessTokenExpiresIn;
             } else {
                 accessTokenExpiresAt = getExpiresJwtClaim(accessToken);
diff --git a/integration-tests/oidc-client-wiremock/src/test/java/io/quarkus/it/keycloak/KeycloakRealmResourceManager.java b/integration-tests/oidc-client-wiremock/src/test/java/io/quarkus/it/keycloak/KeycloakRealmResourceManager.java
index d239dc5ef7b..a8aef8f8c2f 100644
--- a/integration-tests/oidc-client-wiremock/src/test/java/io/quarkus/it/keycloak/KeycloakRealmResourceManager.java
+++ b/integration-tests/oidc-client-wiremock/src/test/java/io/quarkus/it/keycloak/KeycloakRealmResourceManager.java
@@ -41,7 +41,7 @@ public Map<String, String> start() {
                         .aResponse()
                         .withHeader("Content-Type", MediaType.APPLICATION_JSON)
                         .withBody(
-                                "{\\"accessToken\\":\\"access_token_n\\", \\"expiresIn\\":4, \\"refreshToken\\":\\"refresh_token_n\\"}")));
+                                "{\\"accessToken\\":\\"access_token_n\\", \\"expiresIn\\":\\"4\\", \\"refreshToken\\":\\"refresh_token_n\\"}")));
 
         server.stubFor(WireMock.post("/tokens")
                 .withRequestBody(matching("grant_type=refresh_token&refresh_token=refresh_token_1"))