Auf Alfresco CMIS mittels NTLM-Authentifizierung zugreifen

Wir verwenden die Alfresco Community Version 5.0.d mit aktivierter NTLM-Authentifizierung (siehe z.B. http://docs.alfresco.com/community/concepts/auth-alfrescontlm-props.html). Das funktioniert problemlos und es lässt sich nun auf Alfresco Share im Intranet mit dem Windows Login zugreifen.

Da wir aber gleichzeitig die CMIS-Schnittstelle verwenden, war diese nicht mehr erreichbar da jetzt statt Basic Authentication NTLM verlangt wird.

Bei der von uns verwendetetn OpenCMIS-Bibliothek (https://chemistry.apache.org/java/opencmis.html) geschieht der Zugriff über NTLM folgendermaßen:

private void createSession() {
	CookieManager cm = new CookieManager(null, CookiePolicy.ACCEPT_ALL);
	CookieHandler.setDefault(cm);
	
	Map<String, String> parameter = new HashMap<String, String>();
	parameter.put(SessionParameter.USER, user);
	parameter.put(SessionParameter.PASSWORD, password);
	parameter.put(SessionParameter.ATOMPUB_URL, atomPubUrl);
	
	parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());		
	parameter.put(SessionParameter.REPOSITORY_ID, repositoryId);	


	parameter.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS, CmisBindingFactory.NTLM_AUTHENTICATION_PROVIDER);
	
	try {
		SessionFactory sessionFactory = SessionFactoryImpl.newInstance();
		this.session = sessionFactory.createSession(parameter);
	} catch (Exception e) {
		this.session = null;
	}
}

Wichtig hierbei sind die 2 Zeilen die den CookieManager definieren. Das war so an keiner Stelle direkt dokumentiert, ist aber anscheinend erforderlich für den NTLM-Prozess.

Diese 2 Zeilen haben im Übrigen auch gefehlt, um die CMIS Workbench wieder zum Zugriff zu bewegen. In der Methode connect der Datei ClientSession.java mussten diese eingefügt werden, dann konnte auf das Alfresco Repository mittels NTLM wieder zugegriffen werden.