Comment authentifier les services Web Java basés sur du soap?

Je développe des services Web basés sur Soap en utilisant Java. Quelqu’un peut-il me dire comment authentifier le client qui utilise les services Web?

Merci.

Probablement le meilleur mais le plus complexe est WS-Security avec différentes méthodes d’authentification. Mais c’est très complexe et c’est bon pour l’environnement de l’entreprise. Il vous permet de créer une authentification de bout en bout et propose de nombreuses options. Vous pouvez dans un cas simple, par exemple utiliser Web Services Security Nom d’utilisateurToken Profil

  ...   NNK weYI3nXd8LjMNVksCKFV8t3rgHh3Rw== WScqanjCEAC4mQoBE07sAQ== 2003-07-16T01:24:32   ...  ...  

Je ne sais pas quelle bibliothèque vous utilisez, mais voici un article intéressant sur l’installation de Rampart dans Axis2 et la mise en œuvre de la gestion de UsernameToken .

Mais dans certains cas simplifiés, vous pouvez simplement effectuer l’authentification HTTP de base sur le serveur Web (via SSL). C’est peut-être la pire solution, mais il peut parfois être plus simple à mettre en œuvre. Une autre solution, non connectée à soap, peut être l’authentification mutuelle SSL (avec l’autorisation du client).

Différents moyens et types de sécurité que nous pouvons implémenter: Sécurité au niveau du message

  • Sécurité au niveau du transport : telle que HTTP Basic / Digest et SSL
  • Sécurité au niveau des messages : telles que WS-Security, signature numérique XML, cryptage XML, XKMS (spécification de la gestion de la gestion des clés), XACML (authentification simplifiée des règles de gestion), SAML (définition de la sécurité). M arkup L anguage), service de messagerie ebXML, projet Liberty Alliance. pour plus de detals
  • Sécurité du contrôle d’access : un rôle de sécurité est un privilège accordé à des utilisateurs ou à des groupes en fonction de conditions spécifiques.

Le plus souvent, nous utilisons WS-Security for SOAP Web Services. Un profil de sécurité WS détermine la façon dont la sécurité WS est activée.

  1. Profil de jeton WSS X.509: utilisez le framework X.509 pour un profil de sécurité WSS X.509.
  2. Profil WSS UsernameToken : lors de la spécification du profil de jeton X.509, vous pouvez également fournir un nom d’utilisateur (nom d’utilisateur) dans la requête SOAP.

Exemple:

  user CBb7a2itQDgxVkqYnFtggUxtuqk= 5ABcqPZWb6ImI2E6tob8MQ== 2010-06-08T07:26:50Z  

L’élément ci-dessus inclut dans l’en-tête SOAP comme suit:

 SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope(); SOAPHeader header = envelope.addHeader(); SOAPElement security = header.addChildElement("Security", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); SOAPElement usernameToken = security.addChildElement("UsernameToken", "wsse"); SOAPElement username = usernameToken.addChildElement("Username", "wsse"); username.addTextNode(user); SOAPElement password = usernameToken.addChildElement("Password", "wsse"); password.setAtsortingbute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"); password.addTextNode(encodedPass); //encodedPass = Base64 ( SHA-1 ( nonce + created + password ) ) SOAPElement nonce = usernameToken.addChildElement("Nonce", "wsse"); nonce.addTextNode(Base64.encodeBytes(nonceSsortingng.getBytes())); SOAPElement created = usernameToken.addChildElement("Created", "wsu","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"); created.addTextNode(creatTime); 

L’exemple suivant est simple, ajout d’un utilisateur et d’un mot de passe à l’en-tête HTTP uniquement.

  • Authentification d’application avec JAX-WS Voici un exemple détaillé pour vous montrer comment gérer l’authentification au niveau de l’application avec JAX-WS.
  • Authentification du conteneur avec JAX-WS + (version Tomcat) Voici un exemple détaillé pour vous montrer comment implémenter l’authentification du conteneur avec JAX-WS, sous Tomcat.

Authentification d’application avec JAX-WS à l’aide de l’interface WebServiceContext

WebServiceImpl.java

 package com.javacodegeeks.enterprise.ws; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.jws.WebService; import javax.xml.ws.WebServiceContext; import javax.xml.ws.handler.MessageContext; @WebService(endpointInterface = "com.javacodegeeks.enterprise.ws.WebServiceInterface") public class WebServiceImpl implements WebServiceInterface { @Resource WebServiceContext webServiceContext; @Override public Ssortingng getHelloWorldAsSsortingng(Ssortingng str) { MessageContext messageContext = webServiceContext.getMessageContext(); // get request headers Map requestHeaders = (Map) messageContext.get(MessageContext.HTTP_REQUEST_HEADERS); List usernameList = (List) requestHeaders.get("username"); List passwordList = (List) requestHeaders.get("password"); Ssortingng username = ""; Ssortingng password = ""; if (usernameList != null) { username = usernameList.get(0).toSsortingng(); } if (passwordList != null) { password = passwordList.get(0).toSsortingng(); } // of course this is not real validation // you should validate your users from stored databases credentials if (username.equals("nikos") && password.equals("superpassword")) { return "Valid User :"+str; } else { return "Unknown User!"; } } } 

WebServiceClient.java

 package com.javacodegeeks.enterprise.ws.client; import java.net.URL; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.namespace.QName; import javax.xml.ws.BindingProvider; import javax.xml.ws.Service; import javax.xml.ws.handler.MessageContext; import com.javacodegeeks.enterprise.ws.WebServiceInterface; public class WebServiceClient{ public static void main(Ssortingng[] args) throws Exception { URL wsdlUrl = new URL("http://localhost:8888/webservice/helloworld?wsdl"); //qualifier name ... QName qname = new QName("http://ws.enterprise.javacodegeeks.com/", "WebServiceImplService"); Service service = Service.create(wsdlUrl, qname); WebServiceInterface sayHello = service.getPort(WebServiceInterface.class); Map requestContext = ((BindingProvider)sayHello).getRequestContext(); requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8888/webservice/helloworld?wsdl"); Map> requestHeaders = new HashMap>(); requestHeaders.put("username", Collections.singletonList("nikos")); requestHeaders.put("Password", Collections.singletonList("superpassword")); requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, requestHeaders); System.out.println(sayHello.getHelloWorldAsSsortingng("- This is Java Code Geeks")); } } 

WS-Security fournit le moyen standard de sécuriser les services Web basés sur SOAP et la stratégie WS-Security explique comment communiquer ces exigences de sécurité au monde extérieur.

L’authentification peut être avec un nom d’utilisateur / mot de passe – avec UsernameToken ou basé sur un certificate.

Puisque vous êtes basé sur Java, vous pouvez utiliser le serveur d’applications WSO2 open source pour déployer votre service et en quelques clics, vous pouvez sécuriser votre service.

Cela explique comment le faire …

Merci…

Voici un bon exemple de service Web via JAX-WS avec authentification