Author Archives: Claude Vedovini

Visite de Beijing

DSC_0680

J’ai fini par pouvoir uploader une bonne partie des photos restantes en particulier le parc de Beihai, connu pour sont Dagoba blanc, une pagode de style tibetain, et les fameux Hutong, une specialite Pekinoise nee pendant la dynastie Yuan.

La dynastie Yuan a ete fondee par Kubilai Khan, le petit-fils de Gengis, un roi Mongol qui a fini par reussir a envahir et soumetre la Chine malgre la Grande Muraille. Pendant leur reigne ils imposerent aux pekinois certaines lois mongoles dont celle qui interdisais de bloquer l’acces des puits (Hot en mogol d’ou Hutong) aux cavaliers.

Du coup, pour proteger leur intimite (et surement pour casser les pieds aux barbares aussi) les pekinois commencerent a construire des murs entre leurs maisons, ne laissant l’acces aux puits qu’a travers un dedale de petite rues appelees Hutong et creant par la meme occasion les Siheyuan, des ensembles de maisons reserees autour de petites cours fermees.

DSC_0696

Avec la modernisation de la cite il ne reste plus beaucoup de Hutong et ceux-ci sont maintenant plus ou moins proteges. Neanmoins leur entretient depend des leurs habitants et on voit bien que ceux-ci n’ont pas les moyens ou s’en moque. En effet dans certains Siheyuan, les parties communes sont de vrais depotoires alors que les interieurs sont confortables et bien entretenu.

Une prise USB, enfin!

Ca y est, on a finalement trouve un ordinateur avec une prise USB. Enfin, Yang a trouve…

En fait on se trouve ce soir dans une sorte de club prive, amenage par les membres de l’association des proprietaires de Volkswagen BORA (et d’autres associations dans le meme genre). Sans rire, en fait je crois que l’association est un pretexte :)
Les lieux sont tres cools, modernes, confortables et les membres s’y retrouvent pour faire des BBQ, boire des bieres et jouer a la X-Box. Il y a meme un bar avec un barman, mais je ne suis pas sur qu’il ait l’age legal pour boire ce qu’il sert…

A part ca je peut enfin telecharger les photos de Suzhou, Mudu, Wuxi et Nanjing, je vais en profiter pour mettre a jour les posts precedents. Je telecharge egalement certaines des photos de cette semaine a Beijing, malheureusement je n’ai pas le temps pour celles de Gugong, la cite interdite ou nous sommes alle aujourdhui, nous n’avons pas eu le temps de tout visiter il faudra revenir.

Parmis ces photos vous verez la plupart du temps les sites historiques et les attractions pour touristes que nous avons visites, mais a quelques occasions j’ai aussi voulu montrer l’envers du decors.

Nous devrions partir de Beijing d’ici un ou deux jours et nous diriger vers le Shanxi et Xian, une tres ancienne capitale et le point de depart de la route de la soie.

Beijing

Nous sommes arrive a Beijing apres un voyage en train de 9 heures. Heureusement c’etait un train de nuit avec couchettes, je m’attendais a un truc pas terrible mais les wagons etaient assez modernes et tres confortables (bon, on avait pris des billets de premiere aussi, il y avait meme une tele par couchette) j’ai donc dormis comme un bebe et les 9 heures sont passees sans s’en rendre compte. Arrivee a Beijing a 7 heure du matin en plein “rush hour” et un brouillard que je ne saurais attribuer a la pollution ou a l’humidite. Surement un peu des deux.

Le plus impressionant, encore apres 5 jours, reste l’ampleur des travaux qui ont lieu partout dans la ville. Le premier jour je me suis dit que cela devait etre une coincidence que les travaux soient justement dans notre quartier (on habite chez les parents de Yang) mais en fait c’est comme ca partout dans Beijing, voire pire. Preparations pour les JO de 2008, il parait que tout doit etre fini en 2007 et ils renovent la ville dans les grandes largeures.
Je vous laisse imaginer une ville de 13 millions d’habitants, qui fonctionne, les gens vont au boulot comme d’habitude. Et la vous imaginer en plus les routes defoncees ou en cours de goudronnage, les carrefours que l’on refait a neuf, les vieux batiments que l’on detruit, les nouveaux que l’on construit; a l’echelle de 2 fois la population de la Suisse: Le MEGA bordel!

En plus, le temps est pas terrible: brouillard avec alterance d’averses, mais au moins ca netoie l’air de la poussiere des chantiers. Ca a l’air de vouloir s’arranger un peu depuis mardi mais je ne suis pas presse, a la tele ils parlent de canicule et de coupures d’electricite presque partout…

Lundi on etait a WangFuJing, l’avenue la plus commerciale de Beijing, connue partout pour ses “shopping mall” gigantesques. C’est la ou j’ai pu commencer a voir beaucoup plus d’occidentaux (toutes proportions gardees, la foule de Chinois reste largement majoritaire, mais ca n’etonnera personne). J’ai egalement pu observer un sport qui semble populaire parmis les jeunes filles Pekinoises: La peche a la baleine.

Ce sport est pratique, semble-t-il, par des etudiantes, parlant anglais, jeunes, jolies, a la mode et n’ayant pas froids aux yeux. Dans la foule qui deambule elles reperent un occidental, de sexe male et esseule (la baleine) et se jetent sur lui a coup de “Hello, where are you from?”, une fois ainsi harpone ils partent ensemble faire les boutiques.

J’ai pu voir ca de mes yeux en ayant repere un americain seul qui depassait la foule de 2 tetes, en 30 secondes il s’est fait litteralement harponer par deux (2) jolies filles.

J’avoue, j’en avait moi-meme fais l’experience quelque minutes plus tot apres avoir laisse Yang essayer sa 30ieme paire de chaussures de l’apres-midi pour regarder d’autres vitrines. Il n’a pas fallu 5 minutes pour que je soit aborde.

J’ignore comment cela se termine apres, est-ce qu’elles entrainent leur baleine de boutique en boutique, a l’eglise, ou bien elles veulent juste pratiquer leur anglais? Arnaud, si tu me lis, il faut absolument que tu viennes a Beijing pour tes prochaines vacances histoire de resoudre ce mystere pour moi ;-)

Hangzhou, Suzhou, Wuxi & Nanjing

N’aller pas croire qu’il n’y a pas de Cyber-cafe en Chine, en fait il y’en a pas mal, bondes de jeunes Chinois venu jouer en ligne ou regarder des films. La raison pour laquelle ce deuxieme post est si eloigne du premier est surtout qu’apres une journee de visites sous un soleil de plomb la perspecive d’aller passer deux heures devant un ordinateur plutot que de prendre une douche et dormir semble tout bonnement ridicule :-)
Du coup je post depuis Beijing ou nous sommes depuis 4 jours, mais la pas moyen de trouver un Cyber-cafe avec une prise USB, donc les dernieres photos (dont celles de Suzhou, Wuxi et Nanjing) ne sont pas en ligne. Il faudra attendre un peu :-(

J’ai donc resolu de trouver un petit carnet (rouge) dans lequel je peut rediger a l’avance mes posts et passer moins de temps a les taper.

DSC_0001

Apres Shanghai nous sommes donc descendu vers le sud, a Hangzhou puis avons remonte le grand canal jusqu’a Nanjing. C’est une des region la plus touristique de Chine car elle a abrite plusieurs capitales au fil des dinasties.

Contrairement a Shanghai, ou la ville semble vouloir evoluer plus vite que sa population, ces villes ont l’air de s’etre modernisees plus calmement, a un rythme plus humain.

Pour ce qui est du temps il fait toujours chaud et humide, le pire a ete a Nanjing pendant que nous visitions les tombeaux de la dinastie Ming. Je crois qu’on a du depasser 40, j’avais l’impression d’une odeur de cervelle grillee se degageant de mes oreilles.

Les gens me regardent toujours avec un melange d’etonnement et de curiosite mais maintenant cela m’amuse, d’autant plus quand c’est une fille qui se retourne en gloussant avec ses copines quand je la salue.

On ne croise que tres peu d’occidentaux, il y a foule de touristes mais ils sont tous Chinois! Je ne sais pas pourquoi? Je crois que les occidentaux se deplacent exclusivement en groupes et dorment dans des hotels 5 etoiles.
En parlant d’hotel, si vous venez en Chine je vous recommande une chaine chinoise: Jinjiang Inn peu de service mais propres et modernes (je pense que c’est l’equivalent d’un 2 ou 3 etoiles en europe) celui de Shanghai n’etait pas terrible (il y’en a une dixaine, on a du tomber sur le pire) mais les suivants etaient vraiment tres bien.

DSC_0362

Pour finir une petite annecdote qui illustre le fait que la Chine est un marche pour lequel les grandes societes mondiales se font la guerre: A Wuxi, qui est une petite ville de 3 millions d’habitants, nous avons arpente une des rues les plus commercantes pendant plus de 30 minutes sans trouver aucun restaurant Chinois. Par contre, a chaque carrefour (c’est-a-dire environ tous les 200 metres) il y avait un Mac Donald’s, un Kentucky FriedChicken et un Pizza Hut!
Ca m’a fait penser a la guerre Migros/Coop, en plus McDo vend du Coca et KFC du Pespi…
Finalement on a pris une rue transversale et fini par trouver un resto Chinois ouvert toute la nuit. Il etait vide contrairement aux autres qui semblent rencontrer un succes indeniable. J’avais d’ailleurs pris une photo la veille a Suzhou ou on peut voir une file d’attente a l’entree d’un Pizza Hut…

DSC_0193

Learning Chinese

By the way, I started learning Chinese some months ago, bought some books, took some lessons and finally had the idea to look on the Internet for some resources.

And I found an absolutely fantastic podcast called ChinesePod.com, there you can download free daily podcasts and, if you want to go further, pay your subscription to get access to other resources like transcripts or exercises.

They have 4 different difficulty levels (newbie, elementary, intermediate, and advanced) and the podcasts are meant to address everyday life and business in China in a very practical way.

If you are learning Chinese or have ever planned to do so, just give it a try: ChinesePod.com

下回见

Windows Integrated Security and Java Web Applications

In my previous post I was explaining how to use an Active Directory server to authenticate a user. Indeed, I was trying to make the system authenticate the user using the Windows credentials that she already entered when logging onto her workstation.

Some years ago I was working with IIS and it was only a matter of configuration of the server to enable that for browsers that were supporting the appropriate protocol (others would be using HTTP basic).
One of the advantages of that protocol is that the user’s password is never sent over the wire. I found out this protocol is named SPNEGO and is an extension to the HTTP Negotiate protocol.

Since negotiation must occur between the browser and the server, if the server does not natively implement that protocol you cannot use the standard security APIs like custom registries or JAAS.
The solution is then to disable the server standard authentication mechanism and implement a filter that will negotiate, using SPNEGO, with the browser.

In the principle it looks easy but one still need to implement SPNEGO and bridge with Windows, because it’s Windows that finally authenticates the user.

After some goggling I found that the jCIFS library and its extension jCIFS-Ext have the necessary support to help me do the job. In fact everything is already there, even the filter: jcifs.http.AuthenticationFilter.

So first, let’s configure the security constraints for our web-app. In the web.xml we must have the following:

I do not define any role nor any authentication method because I don’t actually want the server to do the authentication by himself. Nevertheless, I define that I want confidentiality on those URLs.
I do that because I will configure my filter to fall-back to HTTP Basic if the browser does not support SPNEGO or HTTP Negotiate and I do not want the password to travel unencrypted on the net.

I hope this imply that if the application is not served over HTTPS there will be a problem, but I actually correctly configured my server to serve the application over HTTPS so I did not test this behaviour.

The second step is to configure the filter itself, the jCIFS-Ext filter has undocumented parameters so I had to go through the code to find them:

“Et voilà“, now your application should automatically authenticate the user based on its Windows credentials. I said should because there are some prerequisites:

  • on the browser side, Windows integrated security must be enabled
  • on the server side your platform must actually support Kerberos for the filter to properly work.

However, the former is a matter of configuration and the latter is a matter of slightly changing the code of the filter.

Configuring an Internet Explorer Browser

To configure an Internet Explorer browser to use Windows authentication, follow these procedures in Internet Explorer:

  1. Configure Local Intranet Domains
    1. In Internet Explorer, select Tools > Internet Options.
    2. Select the Security tab.
    3. Select Local intranet and click Sites.
    4. In the Local intranet popup, ensure that the “Include all sites that bypass the proxy server” and “Include all local (intranet) sites not listed in other zones” options are checked.
    5. Click Advanced.
    6. In the Local intranet (Advanced) dialog box, add all relative domain names that will be used for Integrator server instances participating in the SSO configuration (for example, myhost.example.com) and click OK.
  2. Configure Intranet Authentication
    1. Select Tools > Internet Options.
    2. Select the Security tab.
    3. Select Local intranet and click Custom Level…
    4. In the Security Settings dialog box, scroll to the User Authentication section.
    5. Select Automatic logon only in Intranet zone. This option prevents users from having to re-enter logon credentials, which is a key piece to this solution.
    6. Click OK.
  3. Verify the Proxy Settings (If you have a proxy server enabled)
    1. Select Tools > Internet Options.
    2. Select the Connections tab and click LAN Settings.
    3. Verify that the proxy server address and port number are correct.
    4. Click Advanced.
    5. In the Proxy Settings dialog box, ensure that all desired domain names are entered in the Exceptions field.
    6. Click OK to close the Proxy Settings dialog box.
  4. Set Integrated Authentication for Internet Explorer 6.0 (In addition to the previous settings, one additional setting is required if you are running Internet Explorer 6.0)
    1. In Internet Explorer, select Tools > Internet Options.
    2. Select the Advanced tab.
    3. Scroll to the Security section.
    4. Make sure that Enable Integrated Windows Authentication option is checked and click OK.
    5. If this option was not checked, restart the computer.

Despite all of this configuration I encountered some cases where this was not working at all in IE and I was unable to spot the problem, so you might be falling into this category. The symptoms are that the negociation process takes place but the browser does not answer the last challenge and no error message is displayed at all.

Configuring a Mozilla Firefox Browser

To configure an Mozilla Firefox browser to use Windows authentication, follow these procedures in Mozilla Firefox:

  1. Type about:config in the address bar of the browser and press return (a big list of properties should be displayed in the browser window).
  2. Type “network” in the filter box.
  3. Double-click on the network.automatic-ntlm-auth.trusted-uris property and enter “mydomain.com” (if there is already a value you can add a comma to separate both entries)

The value for this preference is a comma-separated list of URI fragments. This sample string shows the three legal kinds of fragments: https://, http://www.example.com, test.com

The first fragment says, “Trust all URLs with an https scheme.” The second fragment (a full URL) says, “Trust this particular web site.” The third fragment is interpreted to mean http://anything.test.com, so any web site that is a subdomain of test.com, including test.com itself, will also be trusted.

I did not encounter any problem with Firefox which is what I call a paradox…

Changing the filter to use NTLM instead of Kerberos

Actually the change must not occur in the filter but in the class jcifs.spnego.Authentication which comes with jCIFS-Ext. This class tries to determine if the system supports Kerberos but uses introspection, looking for some Java classes that enable Kerberos support in Java.
Nevertheless, those classes can be there without the actual system supporting Kerberos (which is the case where I work).

Fortunately, modifying the behaviour is not too much complicated, just change line 57 of this class:

to the following:

And then the filter will use NTLM instead of Kerberos.

I hope the next posts will be shorter :-P

ActiveDirectory authentication in Java

Recently I came into trying to authenticate users of an intranet web-application against the ActiveDirectory server that is used to authenticate them on their Windows desktop. Here is some code I used to achieve this.

I went into several steps, the first of them being creating a custom user registry to interface my web server and the AD server.

I was using Jetty as the web container so I had to develop an implementation of Jetty’s UserRealm but in any other web container or application things should be the same.
Mostly you need to do two things:

  1. Authenticate the user’s credentials
  2. Retrieve the user’s roles

1. Authenticating the user

Once you have created the initial context, the user has been authenticated by the AD server and everything is fine (creating the inital context will throw a NamingException otherwise).

However, since you are going to send the user’s credentials over the network you may want to have some confidence in the protocole that is used to negociate the connection. The javax.security.sasl.qop and other properties may be set to ensure that the protocole is safe.

This code adds the domain name to the username, that way the user doesn’t have to enter domain\username as its credentials but only its username.
You may want to force her to enter the domain or do some autodetection… as you like.

2. Retrieving the user’s roles

The roles that are returned are distinguished names, like cn=Joe Smith,ou=Sales,dc=mydomain,dc=com so that may be another issue to map them to simpler names. Fortunately I didn’t need these roles for my application.

The second step for me was to actually enable single sign-on (authentication without asking for credentials).

I quickly discovered that the previous code was totally useless for that purpose. But I keep this one for a later post ;-)