Josh Protocol! può essere configurato per utilizzare l’endpoint OAuth2 messo a disposizione da myjosh. Quando è attiva una configurazione di questo tipo, è necessario passare un token di autorizzazione, come nel caso di Microsoft Entra ID. Questo token però deve essere richiesto all’endpoint di autenticazione di myjosh e può essere ottenuto in due modi distinti.
Generazione token tramite client id e secret
E’ possibile ottenere il token di autorizzazione dell’endpoint myjosh, utilizzando il client id e il client secret di una app registration definita su myjosh.
Per ottenere il token tramite client id e secret la chiamata da fare è la seguente:
curl --location --request POST ' https://MYJOSH_URL/authenticator/oauth2/token' \
--form 'grant_type="client_credentials"' \
--form 'client_id="
"' \
--form 'client_secret="
"' \
--form 'scope="service_account"'
Generazione token tramite certificato
La seconda modalità per ottenere un access token dall’endpoint di autorizzazione di myjosh è quella che utilizza un certificato. E’ necessario generare una client assertion firmata con un certificato.
Lato app registration di myjosh, andrà impostato, nella sezione dell’utente di servizio, il certificato contenente la chiave pubblica del certificato utilizzato per firmare la client assertion. In questo modo myjosh sarà in grado di verificare la firma dell’assertion.
Il frammento seguente di codice c# mostra come generare la client assertion:
var cert = new X509Certificate2(@"PATH_CERTIFICATO", "PASSWORD", X509KeyStorageFlags.Exportable);
RSA rsaProv = cert.GetRSAPrivateKey();
var expires = DateTime.UtcNow.AddMinutes(5);
var handler = new JwtSecurityTokenHandler();
var token = handler.CreateToken(new SecurityTokenDescriptor
{
Issuer = "APP_REDIRECT_URI",
Audience = "APP_CLIENT_ID",
NotBefore = DateTime.UtcNow,
Expires = expires,
SigningCredentials = new SigningCredentials(new RsaSecurityKey(rsaProv), SecurityAlgorithms.RsaSha256)
});
var clientAssertion = handler.WriteToken(token);
Una volta ottenuta la client assertion si procederà alla chiamata verso l’endpoint myjosh in modo del tutto analogo a quanto visto nel paragrafo precedente:
curl --location --request POST ' https://MYJOSH_URL/authenticator/oauth2/token' \
--form 'grant_type="client_credentials"' \
--form 'client_id="
"' \
--form 'scope="service_account"' \
--form 'client_assertion_type="urn:ietf:params:oauth:client-assertion-type:jwt-bearer"' \
--form 'client_assertion=""'
Il token ottenuto sarà relativo all’utente di servizio associato all’app registration di myjosh individuata dal client ID.
Una volta ottenuto l’access token è sufficiente passarlo nell’header come visto nel paragrafo precedente:
curl --location --request GET 'http://myJpWebServer/joshProtocolRestAPI/api/protocolli/10' \
--header 'Authorization: Bearer eyJ0eXAiOiJKV1Q...B47eHwbh6KA'