Client del servizio Web e configurazione della politica per utilizzare la politica del provider del servizio
Se un provider di servizi pubblica la sua politica nel proprio WSDL (Web Services Description Language), la configurazione della politica di un client di servizi WebSphere® Application Server può essere configurata in modo dinamico, in base alle politiche supportate dal provider di servizi.
Il fornitore di servizi deve pubblicare la propria politica in formato WS-PolicyAttachment nel proprio WSDL e il cliente deve essere in grado di supportare tali politiche del fornitore. Il client può basare la sua configurazione della politica interamente sulla politica del provider o in parte sulla politica del provider con limitazioni definite dalla configurazione della serie di politiche del client.
Un cliente acquisisce la politica del provider utilizzando una richiesta GET HTTP o il protocollo Web Services Metadata Exchange ( WS-MetadataExchange ) per ottenere il WSDL del provider. È possibile configurare il modo in cui il client ottiene la politica del provider e l'endpoint su cui viene acquisita la politica, utilizzando la console di gestione o i comandi wsadmin. Se si utilizza il protocollo WS-MetadataExchange per ottenere la politica del provider, ciò presenta il vantaggio di poter proteggere le richieste WS-MetadataExchange GetMetadata utilizzando un set di politiche di sistema adeguato.
Se la policy del provider utilizza WSDL multipart, è possibile utilizzare una richiesta GET HTTP per ottenere la policy del provider, ma non è possibile utilizzare il protocollo WS-MetadataExchange. Per ulteriori informazioni su WSDL a più parti, consultare l'argomento relativo a WSDL.
La politica lato client dell'applicazione Web viene calcolata e memorizzata nella cache come configurazione di runtime. Questa politica calcolata è nota come politica effettiva e viene utilizzata per le successive richieste del servizio Web in uscita all'endpoint o all'operazione per cui è stato eseguito il calcolo. La configurazione originale della serie di politiche del client non viene modificata.
Per un servizio specifico, la configurazione della politica dinamica si verifica una volta per impostazione predefinita e si presume che questa configurazione sia la stessa per tutti gli endpoint che implementano un servizio, perché hanno lo stesso WSDL. I calcoli della politica basati sul WSDL vengono memorizzati nella cache nel runtime del client (non sono persistenti) e condivisi con ciascun servizio di destinazione.
In un ambiente cluster, ciò significa che il client non ottiene nuovamente la politica del provider per ciascuna istanza endpoint di un servizio web.
In WebSphere Application Server Versione 8.0 e successive, è possibile configurare un riferimento del servizio per utilizzare un documento WSDL diverso rispetto al WSDL configurato per il servizio client. Per impostazione predefinita, i riferimenti del servizio ereditano la serie di politiche e la configurazione WS - Policy dal servizio principale, tuttavia, se lo si desidera, la serie di politiche e la configurazione WS - Policy possono essere sovrascritte. Consultare Utilizzo di WS - Policy per scambiare le politiche in formato standard per ulteriori dettagli.
Se si richiede una configurazione della politica differente per ogni implementazione dell'endpoint, è necessario creare una nuova porta per ogni endpoint. Quindi, è possibile specificare una configurazione della politica differente per ogni endpoint.
Le politiche di trasporto quali HTTP, SSL e JMS non possono essere espresse in formato WS-PolicyAttachment, pertanto il client non può acquisire le politiche di trasporto del fornitore di servizi. Se il client richiede le politiche di trasporto, è necessario configurare tali politiche come parte della configurazione della serie di politiche del client.
Per una richiesta GET dell' HTTP, quando la richiesta è indirizzata alla stessa posizione dell'endpoint, la richiesta utilizza le stesse politiche di trasporto HTTP e SSL dell'applicazione. Quando la richiesta GET HTTP è indirizzata a un endpoint diverso, è anche possibile allegare un set di criteri di sistema per specificare criteri di trasporto diversi per HTTP e SSL.
Per una richiesta WS-MetadataExchange GetMetadata, viene utilizzata la configurazione WS-Security nel set di criteri di sistema specificato. Le proprietà di trasporto dell' HTTP e sono ereditate dall'applicazione.
Un client configurato per utilizzare il linguaggio Security Assertion Markup Language ( SAML ) può utilizzare la configurazione dinamica dei criteri. Tuttavia, il client deve essere configurato per utilizzare i collegamenti generali.
Politica in un registro
Un client può ottenere la configurazione delle politiche di un provider di servizi Web da un registro, come il Registro delle politiche dei servizi Web ( WebSphere Service Registry and Repository, WSRR), utilizzando una richiesta GET del protocollo di controllo delle risorse ( HTTP ).
Il WSDL per la politica del provider del servizio, e le relative politiche e allegati della politica corrispondenti, sono memorizzati in un registro come WSRR. Tale policy deve contenere la propria configurazione in formato WS-PolicyAttachments. Il client deve essere in grado di supportare tali politiche del provider.
Il registro deve supportare l'uso di richieste GET HTTP per pubblicare WSDL che contengono allegati WS-Policy, ad esempio WSRR versione 6.2 o successive.
È possibile applicare la politica del provider che il client ottiene da un registro al livello del servizio o del riferimento del servizio , ma non al livello dell'applicazione.
Se è presente una connessione sicura tra il client e il registro, è necessario verificare che l'affidabilità sia stabilita tra il server delle applicazioni e il server del Registro di sistema.
Se il registro richiede l'autenticazione, è necessario configurare anche una politica per autenticare le richieste di servizio in uscita nel registro. Per impostazione predefinita, le credenziali HTTP e HTTPS vengono utilizzate sia per l'endpoint del servizio Web che per il registro. Pertanto, è consigliabile proteggere le credenziali di autorizzazione e assicurarsi che tali credenziali non vengano inviate a un endpoint non autorizzato. È inoltre possibile allegare un set di criteri di sistema per specificare criteri di trasporto diversi per HTTP e SSL.
Eredità politica
La politica del provider può essere allegata a livello di applicazione o servizio. Gli endpoint e le operazioni ereditano la loro configurazione della politica dal servizio pertinente.
Calcolo della politica
- Quando si specifica solo la politica del provider, la politica calcolata si basa su tutte le politiche che il client WebSphere Application Server supporta intersecate dalla politica del provider. Di fatto, il provider determina la politica, purché il client possa supportare tale politica. Questa configurazione della politica è disponibile se il punto di ambito (operazione endpoint) in cui la politica del fornitore è allegata non è allegata a una serie di politiche client e non eredita un allegato della serie di politiche dai punti di ambito parent.
- Quando si specifica la politica del client e del provider, la politica calcolata si basa sulla politica accettabile per i client intersecati dalla politica del provider. Di fatto, la politica è conforme alla serie di politiche del client, ma potrebbe essere ulteriormente limitata dalle politiche dettate dal fornitore. La politica accettabile per il client è definita dalla serie di politiche allegata al punto di ambito client o che il punto di ambito client eredita da un punto di ambito parent. Questa configurazione della politica è disponibile se il punto di ambito (operazione endpoint) in cui la politica del provider è allegata è allegata a una serie di politiche client o eredita un allegato della serie di politiche dai punti di ambito parent.
Il linguaggio WS - Policy fornisce un modo per esprimere più scelte di politica, in modo che il calcolo della politica possa produrre più di un risultato. Ad esempio, il fornitore di servizi potrebbe supportare sia WS-ReliableMessaging 1.0 che WS-ReliableMessaging 1.1. Se il client supporta anche entrambe le versioni, il client può utilizzare entrambe le versioni nelle proprie richieste del servizio Web al provider. In questa situazione, in cui più di una versione della specifica è accettabile sia per il client che per il provider, la politica effettiva viene calcolata utilizzando la versione più recente.
Intersezione della politica nel client di distribuzione JAX - WS
- Il client è conforme alla politica del provider nell'ambito dell'operazione solo se la politica del provider è identica per tutte le operazioni fornite dal servizio (sia semanticamente che sintatticamente).
- Se la politica del provider non è identica per tutte le operazioni fornite dal servizio, il client restituisce una WebserviceException JAX - WS con la causa WSPolicyException (CWPOL0106E) e un messaggio di errore appropriato.
- Se non esiste alcuna politica sulle operazioni, il client utilizza la politica del provider effettiva per l'endpoint del servizio.
javax.xml.ws.Service.addPort invece delle porte predefinite in WSDL o dall'annotazione), l'operazione di richiamo è sempre sconosciuta.Aggiornamento della politica del provider mantenuta dal client
La politica del provider che il client detiene per un servizio viene aggiornata la prima volta che il servizio Web viene richiamato dopo l'avvio dell'applicazione. Successivamente, la politica del provider viene aggiornata al riavvio dell'applicazione o quando si richiama esplicitamente un aggiornamento della politica del provider. Quando la politica del provider viene aggiornata, la politica effettiva viene ricalcolata.
È possibile richiamare un aggiornamento della politica del provider nel codice dell'applicazione. Ciò potrebbe essere utile se una chiamata JAX - WS non riesce; nella gestione delle eccezioni, è possibile forzare un nuovo tentativo con la politica aggiornata. È possibile impostare la seguente proprietà (disponibile nella classe di WSPConstants dell'API) sul proxy del client JAX - WS, quindi emettere nuovamente la richiesta JAX - WS: com.ibm.websphere.wspolicy.refreshProviderPolicy.
Quando viene impostata la proprietà com.ibm.websphere.wspolicy.refreshProviderPolicy , la politica del provider che il client detiene per un servizio viene aggiornata e la politica effettiva viene ricalcolata alla richiesta successiva. Una volta eseguito l'aggiornamento e il ricalcolo, l'impostazione della proprietà com.ibm.websphere.wspolicy.refreshProviderPolicy viene annullata.
Il seguente esempio di codice per un client di invio mostra l'identificazione di un'eccezione che potrebbe essere risolta aggiornando la politica provider, seguita dal richiamo dell'aggiornamento.
try
{
dispatch.invoke(params);
}
catch (javax.xml.ws.WebServiceException e)
{
Throwable cause = e.getCause();
if ((cause instanceof NullPolicyException) || (cause instanceof PolicyException) )
{
// The exception might be because the policy of the provider is not up to date.
//
// There is also a message on the console that starts with the characters CWPOL,
// which helps to decipher and debug the cause of the error.
// This message is also available by using
// String nlsedMessage = cause.getMessage();
Map<String, Object> requestContext = dispatch.getRequestContext();
requestContext.put(WSPConstants.REFRESH_PROVIDER_POLICY, Boolean.TRUE);
// The following method might cause another jax-ws invocation exception.
// The cause might still be policy, in which case, a message is written to the
// console.
dispatch.invoke(params);
}
// For all other exceptions, use the normal exception handling for the
// application. In this case, assume there are no other exceptions and rethrow the
// initial exception. Remember that the WebServiceException might be caused by a
// WSPolicyAdministrationException. In this situation, a message is written to the
// console, but forcing a refresh in the application cannot resolve the problem.
throw e;
}