diff options
| author | Emmanuel Raviart <eraviart@entrouvert.com> | 2004-07-22 10:52:11 +0000 |
|---|---|---|
| committer | Emmanuel Raviart <eraviart@entrouvert.com> | 2004-07-22 10:52:11 +0000 |
| commit | 5c6f115243a2ec13a2e077388957fabd5d59cdfe (patch) | |
| tree | 870612007ae97e63883431caee7ff446ae822aa4 | |
| parent | deee550561978259663cc0f1e123d6acb5835149 (diff) | |
| download | lasso-5c6f115243a2ec13a2e077388957fabd5d59cdfe.tar.gz lasso-5c6f115243a2ec13a2e077388957fabd5d59cdfe.tar.xz lasso-5c6f115243a2ec13a2e077388957fabd5d59cdfe.zip | |
A little more java binding and non-regression tests.
| -rw-r--r-- | java/src/c/com_entrouvert_lasso_LassoLogin.c | 49 | ||||
| -rw-r--r-- | java/src/java/com/entrouvert/lasso/Lasso.java | 16 | ||||
| -rw-r--r-- | java/src/java/com/entrouvert/lasso/LassoLogin.java | 10 | ||||
| -rw-r--r-- | java/tests/LoginTest.java | 57 | ||||
| -rw-r--r-- | python/lasso.py | 2 | ||||
| -rw-r--r-- | python/tests/login_tests.py | 40 |
6 files changed, 155 insertions, 19 deletions
diff --git a/java/src/c/com_entrouvert_lasso_LassoLogin.c b/java/src/c/com_entrouvert_lasso_LassoLogin.c index e0a726c0..b232b145 100644 --- a/java/src/c/com_entrouvert_lasso_LassoLogin.c +++ b/java/src/c/com_entrouvert_lasso_LassoLogin.c @@ -65,7 +65,7 @@ JNIEXPORT void JNICALL Java_com_entrouvert_lasso_LassoLogin_initFromDump } JNIEXPORT jint JNICALL Java_com_entrouvert_lasso_LassoLogin_buildArtifactMsg -(JNIEnv * env, jobject this, jint _authenticationResult, +(JNIEnv * env, jobject this, jboolean _authenticationResult, jstring _authenticationMethod, jstring _reauthenticateOnOrAfter, jint _method){ @@ -263,3 +263,50 @@ JNIEXPORT jint JNICALL Java_com_entrouvert_lasso_LassoLogin_processResponseMsg return result; } +JNIEXPORT jstring JNICALL Java_com_entrouvert_lasso_LassoLogin_getAssertionArtifact +(JNIEnv * env, jobject this){ + LassoLogin * login; + char *result; + + login = getCObject(env, this); + + result = login->assertionArtifact; + + return (*env)->NewStringUTF(env, result); +} + +JNIEXPORT jstring JNICALL Java_com_entrouvert_lasso_LassoLogin_getNameIdentifier +(JNIEnv * env, jobject this){ + LassoLogin * login; + char *result; + + login = getCObject(env, this); + + result = login->nameIdentifier; + + return (*env)->NewStringUTF(env, result); +} + +JNIEXPORT jint JNICALL Java_com_entrouvert_lasso_LassoLogin_getProtocolProfile +(JNIEnv * env, jobject this){ + LassoLogin * login; + int result; + + login = getCObject(env, this); + + result = login->protocolProfile; + + return result; +} + +JNIEXPORT jstring JNICALL Java_com_entrouvert_lasso_LassoLogin_getResponseDump +(JNIEnv * env, jobject this){ + LassoLogin * login; + char *result; + + login = getCObject(env, this); + + result = login->response_dump; + + return (*env)->NewStringUTF(env, result); +} diff --git a/java/src/java/com/entrouvert/lasso/Lasso.java b/java/src/java/com/entrouvert/lasso/Lasso.java index 884dfcbf..d8fda146 100644 --- a/java/src/java/com/entrouvert/lasso/Lasso.java +++ b/java/src/java/com/entrouvert/lasso/Lasso.java @@ -46,6 +46,22 @@ public class Lasso { // Lasso static final public String libNameIdPolicyTypeFederated = "federated"; static final public String libNameIdPolicyTypeAny = "any"; + static final public int loginProtocolProfileBrwsArt = 1; + static final public int loginProtocolProfileBrwsPost = 2; + + /* AuthenticationMethods */ + static final public String samlAuthenticationMethodPassword = "urn:oasis:names:tc:SAML:1.0:am:password"; + static final public String samlAuthenticationMethodKerberos = "urn:ietf:rfc:1510"; + static final public String samlAuthenticationMethodSecureRemotePassword = "urn:ietf:rfc:2945"; + static final public String samlAuthenticationMethodHardwareToken = "urn:oasis:names:tc:SAML:1.0:am:HardwareToken"; + static final public String samlAuthenticationMethodSmartcardPki = "urn:ietf:rfc:2246"; + static final public String samlAuthenticationMethodSoftwarePki = "urn:oasis:names:tc:SAML:1.0:am:X509-PKI"; + static final public String samlAuthenticationMethodPgp = "urn:oasis:names:tc:SAML:1.0:am:PGP"; + static final public String samlAuthenticationMethodSPki = "urn:oasis:names:tc:SAML:1.0:am:SPKI"; + static final public String samlAuthenticationMethodXkms = "urn:oasis:names:tc:SAML:1.0:am:XKMS"; + static final public String samlAuthenticationMethodXmlDSig = "urn:ietf:rfc:3075"; + static final public String samlAuthenticationMethodUnspecified = "urn:oasis:names:tc:SAML:1.0:am:unspecified"; + static final public int signatureMethodRsaSha1 = 1; static final public int signatureMethodDsaSha1 = 2; diff --git a/java/src/java/com/entrouvert/lasso/LassoLogin.java b/java/src/java/com/entrouvert/lasso/LassoLogin.java index d8229543..db1b9209 100644 --- a/java/src/java/com/entrouvert/lasso/LassoLogin.java +++ b/java/src/java/com/entrouvert/lasso/LassoLogin.java @@ -44,7 +44,7 @@ public class LassoLogin extends LassoProfileContext { // LassoLogin LassoUser user, String dump); - native public int buildArtifactMsg(int authenticationResult, + native public int buildArtifactMsg(boolean authenticationResult, String authenticationMethod, String reauthenticateOnOrAfter, int method); @@ -67,6 +67,14 @@ public class LassoLogin extends LassoProfileContext { // LassoLogin native public int initRequest(String responseMsg, int responseMethod); + native public String getAssertionArtifact(); + + native public String getNameIdentifier(); + + native public int getProtocolProfile(); + + native public String getResponseDump(); + native public boolean mustAuthenticate(); native public int processAuthnResponseMsg(String authnResponseMsg); diff --git a/java/tests/LoginTest.java b/java/tests/LoginTest.java index 018e8545..3b97bd52 100644 --- a/java/tests/LoginTest.java +++ b/java/tests/LoginTest.java @@ -77,30 +77,63 @@ public class LoginTest extends TestCase { } public void test02_serviceProviderLogin() { + boolean userAuthenticated; + int method; + LassoAuthnRequest authnRequest; + LassoLogin idpLoginContext, spLoginContext; + LassoServer idpContext, spContext; + String artifact, authenticationMethod, authnRequestQuery, authnRequestUrl, idpContextDump, + nameIdentifier, relayState, responseMsg, responseQuery, responseUrl, spContextDump, + soapEndpoint, soapRequestMsg; + // Service provider login using HTTP redirect. - String spContextDump = generateServiceProviderContextDump(); + spContextDump = generateServiceProviderContextDump(); assertNotNull(spContextDump); - LassoServer spContext = new LassoServer(spContextDump); - LassoLogin spLoginContext = new LassoLogin(spContext, null); + spContext = new LassoServer(spContextDump); + spLoginContext = new LassoLogin(spContext, null); assertEquals(spLoginContext.initAuthnRequest( "https://identity-provider:1998/liberty-alliance/metadata"), 0); - LassoAuthnRequest authnRequest = (LassoAuthnRequest) spLoginContext.getRequest(); + authnRequest = (LassoAuthnRequest) spLoginContext.getRequest(); authnRequest.setPassive(false); authnRequest.setNameIdPolicy(Lasso.libNameIdPolicyTypeFederated); authnRequest.setConsent(Lasso.libConsentObtained); - authnRequest.setRelayState("fake"); + relayState = "fake"; + authnRequest.setRelayState(relayState); assertEquals(spLoginContext.buildAuthnRequestMsg(), 0); - String authnRequestUrl = spLoginContext.getMsgUrl(); - String authnRequestMsg = authnRequestUrl.substring(authnRequestUrl.indexOf("?") + 1); - int method = Lasso.httpMethodRedirect; + authnRequestUrl = spLoginContext.getMsgUrl(); + authnRequestQuery = authnRequestUrl.substring(authnRequestUrl.indexOf("?") + 1); + method = Lasso.httpMethodRedirect; // Identity provider singleSignOn, for a user having no federation. - String idpContextDump = generateIdentityProviderContextDump(); + idpContextDump = generateIdentityProviderContextDump(); assertNotNull(idpContextDump); - LassoServer idpContext = new LassoServer(idpContextDump); - LassoLogin idpLoginContext = new LassoLogin(idpContext, null); - assertEquals(idpLoginContext.initFromAuthnRequestMsg(authnRequestMsg, method), 0); + idpContext = new LassoServer(idpContextDump); + idpLoginContext = new LassoLogin(idpContext, null); + assertEquals(idpLoginContext.initFromAuthnRequestMsg(authnRequestQuery, method), 0); assertTrue(idpLoginContext.mustAuthenticate()); + + userAuthenticated = true; + authenticationMethod = Lasso.samlAuthenticationMethodPassword; + assertEquals(idpLoginContext.getProtocolProfile(), Lasso.loginProtocolProfileBrwsArt); + assertEquals(idpLoginContext.buildArtifactMsg( + userAuthenticated, authenticationMethod, "FIXME: reauthenticateOnOrAfter", + Lasso.httpMethodRedirect), 0); + responseUrl = idpLoginContext.getMsgUrl(); + responseQuery = responseUrl.substring(responseUrl.indexOf("?") + 1); + responseMsg = idpLoginContext.getResponseDump(); + artifact = idpLoginContext.getAssertionArtifact(); + nameIdentifier = idpLoginContext.getNameIdentifier(); + method = Lasso.httpMethodRedirect; + + // Service provider assertion consumer. + spContextDump = generateServiceProviderContextDump(); + assertNotNull(spContextDump); + spContext = new LassoServer(spContextDump); + spLoginContext = new LassoLogin(spContext, null); + assertEquals(spLoginContext.initRequest(responseQuery, method), 0); + assertEquals(spLoginContext.buildRequestMsg(), 0); + soapEndpoint = spLoginContext.getMsgUrl(); + soapRequestMsg = spLoginContext.getMsgBody(); } public static Test suite() { diff --git a/python/lasso.py b/python/lasso.py index 5bbebda8..c738fb31 100644 --- a/python/lasso.py +++ b/python/lasso.py @@ -882,7 +882,7 @@ class User: loginProtocolProfileBrwsArt = 1 loginProtocolProfileBrwsPost = 2 - + class Login: """\brief Short desc diff --git a/python/tests/login_tests.py b/python/tests/login_tests.py index 258e3269..f66d0828 100644 --- a/python/tests/login_tests.py +++ b/python/tests/login_tests.py @@ -89,10 +89,11 @@ class LoginTestCase(unittest.TestCase): spLoginContext.request.set_isPassive(False) spLoginContext.request.set_nameIDPolicy(lasso.libNameIDPolicyTypeFederated) spLoginContext.request.set_consent(lasso.libConsentObtained) - spLoginContext.request.set_relayState("fake") + relayState = "fake" + spLoginContext.request.set_relayState(relayState) self.failUnlessEqual(spLoginContext.build_authn_request_msg(), 0) authnRequestUrl = spLoginContext.msg_url - authnRequestMsg = authnRequestUrl.split("?", 1)[1] + authnRequestQuery = authnRequestUrl.split("?", 1)[1] method = lasso.httpMethodRedirect # Identity provider singleSignOn, for a user having no federation. @@ -100,10 +101,41 @@ class LoginTestCase(unittest.TestCase): self.failUnless(idpContextDump) idpContext = lasso.Server.new_from_dump(idpContextDump) idpLoginContext = lasso.Login.new(idpContext) - self.failUnlessEqual(idpLoginContext.init_from_authn_request_msg(authnRequestMsg, method), - 0) + self.failUnlessEqual( + idpLoginContext.init_from_authn_request_msg(authnRequestQuery, method), 0) self.failUnless(idpLoginContext.must_authenticate()) + userAuthenticated = True + authenticationMethod = lasso.samlAuthenticationMethodPassword + self.failUnlessEqual(idpLoginContext.protocolProfile, lasso.loginProtocolProfileBrwsArt) + self.failUnlessEqual(idpLoginContext.build_artifact_msg( + userAuthenticated, authenticationMethod, "FIXME: reauthenticateOnOrAfter", + lasso.httpMethodRedirect), 0) + responseUrl = idpLoginContext.msg_url + responseQuery = responseUrl.split("?", 1)[1] + responseMsg = idpLoginContext.response_dump + artifact = idpLoginContext.assertionArtifact + nameIdentifier = idpLoginContext.nameIdentifier + method = lasso.httpMethodRedirect + + # Service provider assertion consumer. + spContextDump = self.generateServiceProviderContextDump() + self.failUnless(spContextDump) + spContext = lasso.Server.new_from_dump(spContextDump) + spLoginContext = lasso.Login.new(spContext) + self.failUnlessEqual(spLoginContext.init_request(responseQuery, method), 0) + self.failUnlessEqual(spLoginContext.build_request_msg(), 0) + soapEndpoint = spLoginContext.msg_url + soapRequestMsg = spLoginContext.msg_body + +## soapResponseMsg = self.callSoap(loginContext.msg_url, loginContext.msg_body) +## logs.debug("soapResponseMsg = %s" % soapResponseMsg) +## errorCode = loginContext.process_response_msg(soapResponseMsg) +## if errorCode: +## raise Exception("Lasso login error %s" % errorCode) +## nameIdentifier = loginContext.nameIdentifier + + suite1 = unittest.makeSuite(LoginTestCase, 'test') allTests = unittest.TestSuite((suite1,)) |
