J'essaie d'écrire un script groovy (le code java est le bienvenu;)) qui devrait me permettre d'effectuer l'authentification Digest. Le besoin étant d'être capable d'utiliser Digest auth dans SOAPUI parce que SOAP ne supporte pas ce type d'authentification natif.Authentification Groovy Digest
Pour tester mon script j'ai utilisé une URL: https://postman-echo.com/digest-auth
D'abord, j'accéder à la page via un navigateur Web pour obtenir l'en-tête WWW-Authenticate. Digest realm = "Utilisateurs", nonce = "81lEQmJGxRb3Us9jVJPYlDpjw11On7zW", qop = "auth"
Puis je tape le bon utilisateur + mot de passe et vérifiez l'en-tête d'autorisation calculée par le navigateur Web. Voici le résultat:
Digest username="postman", realm="Users", nonce="81lEQmJGxRb3Us9jVJPYlDpjw11On7zW", uri="/digest-auth", response="82884fe7c55a19e80e8c8dea7ba1aece", qop=auth, nc=00000001, cnonce="89aa538367b9069a"
Puis j'ai utilisé les mêmes données pour effectuer le calcul des données de réponse en utilisant mon script. Voici le résultat:
Digest username="postman", realm="Users", nonce="81lEQmJGxRb3Us9jVJPYlDpjw11On7zW", uri="/digest-auth", response="a6767f0a78d17e0cab90df65ec2ace5c", qop=auth,nc="00000001",cnonce="03d476861afd384510f2cb80ccfa8511"
Ma réponse est différente de la réponse calculée par le navigateur Web.
Qu'est-ce que je fais de mal?
Voici mon script:
import org.apache.commons.codec.digest.DigestUtils
import com.eviware.soapui.impl.wsdl.actions.teststep.RunFromTestStepAction
// URL: https://postman-echo.com/digest-auth
wwwAuthHeader = "Digest realm=\"Users\", nonce=\"81lEQmJGxRb3Us9jVJPYlDpjw11On7zW\", qop=\"auth\""
def realmArray = wwwAuthHeader.split(",")
def realm = realmArray[0].split("=")[1]
def nonce = realmArray[1].split("=")[1]
def qop = realmArray[2].split("=")[1]
def uri = "/digest-auth"
def user = "postman"
def pass = "password"
def method ="GET"
def resp = md5(user,realm,pass,method,uri,nonce)
log.info "resp: "+resp
def cnonce = DigestUtils.md5Hex(user)
def authorizationString = "Digest username=\"$user\", realm=$realm, nonce=$nonce, uri=\"$uri\", response=\"$resp\", qop=auth,nc=\"00000001\",cnonce=\"$cnonce\""
log.info "authorizationString: " + authorizationString
// methods
def md5(user, realm, pass, method, String uri, nonce) {
def A1 = DigestUtils.md5Hex ("$user:$realm:$pass")
def A2 = DigestUtils.md5Hex ("$method:$uri")
return DigestUtils.md5Hex ("$A1:$nonce:$A2")
}