Vérifions l'authentification SAML de cybozu.com à partir de python (pysaml2).
hostname
Téléchargez le fichier zip à partir du lien ci-dessous.
wget https://github.com/rohe/pysaml2/archive/master.zip
```bash
unzip master.zip
cd ./pysaml2-master
```
```bash
sudo pip install --upgrade pip
sudo pip install repoze.who
sudo yum install libffi libffi-devel
sudo yum install gcc
sudo python setup.py install
```
Accédez au répertoire de programme exemple.
cd ./pysaml2-master/example
```bash
sudo pip install mako
sudo pip install "cherrypy==7.1.0"
sudo yum install xmlsec1 xmlsec1-openssl
sudo pip install pycryptodomex
```
```bash
./all.sh start
```
Si vous voyez le message suivant, peut-être OK
```bash
$ SP listening on localhost:8087
$ IDP listening on localhost:8088
```
Quittez l'exemple de programme.
```bash
./all.sh stop
```
Ajoutez les paramètres suivants à iptables.
-A INPUT -p tcp -m tcp --dport 8087 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8088 -j ACCEPT
sudo service iptables restart
```bash
./create_key.sh
Generating a new test key and certificate. To change the defaults offered
by openssl, edit your openssl.cnf, such as /etc/ssl/openssl.cnf
Generating RSA private key, 1024 bit long modulus
..................++++++
...........++++++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:[Préfectures]
Locality Name (eg, city) [Default City]:[Municipalité]
Organization Name (eg, company) [Default Company Ltd]:[Nom de la compagnie]
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server s hostname) []:[FQDN]
Email Address []:[adresse mail]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:[mot de passe]
An optional company name []:[Nom de la compagnie]
Signature ok
subject=/C=JP/ST=[Préfectures]/L=[Municipalité]/O=[Nom de la compagnie]/CN=[FQDN]/emailAddress=[adresse mail]
Getting Private key
Now to enable these new keys, do:
cp server.key idp2/pki/mykey.pem
cp server.crt idp2/pki/mycert.pem
cp server.key sp-wsgi/pki/mykey.pem
cp server.crt sp-wsgi/pki/mycert.pem
```
Copiez le certificat que vous avez créé.
```bash
cp server.key idp2/pki/mykey.pem
cp server.crt idp2/pki/mycert.pem
cp server.key sp-wsgi/pki/mykey.pem
cp server.crt sp-wsgi/pki/mycert.pem
```
```bash
29c29
< HOST = 'localhost'
---
> HOST = '0.0.0.0'
35c35
< BASE = "https://%s:%s" % (HOST, PORT)
---
> BASE = "https://%s:%s" % ("[FQDN]", PORT)
37c37
< BASE = "http://%s:%s" % (HOST, PORT)
---
> BASE = "http://%s:%s" % ("[FQDN]", PORT)
40,41c40,41
< SERVER_CERT = "pki/mycert.pem"
< SERVER_KEY = "pki/mykey.pem"
---
> SERVER_CERT = "[Chemin relatif vers la clé publique du certificat de serveur]"
> SERVER_KEY = "[Chemin relatif vers la clé privée du certificat de serveur]"
```
* ./pysaml2-master/example/sp-wsgi/service_conf.py
```bash
4c4
< HOST = 'localhost'
---
> HOST = '0.0.0.0'
20,21c20,21
< SERVER_CERT = "pki/mycert.pem"
< SERVER_KEY = "pki/mykey.pem"
---
> SERVER_CERT = "[Chemin relatif vers la clé publique du certificat de serveur]"
> SERVER_KEY = "[Chemin relatif vers la clé privée du certificat de serveur]"
```
* ./pysaml2-master/example/sp-wsgi/sp_conf.py
```bash
18c18
< BASE = "http://localhost:8087"
---
> BASE = "http://[FQDN]:8087"
21c21
< "entityid": "%s/%ssp.xml" % (BASE, ""),
---
> "entityid": "%s/%sp.xml" % (BASE, ""),
```
```bash
./all.sh start
```
![FireShot Capture 46 - IDP test login_ - https___pysaml2.genbacloud.com_8088_sso_redirect.png](https://qiita-image-store.s3.amazonaws.com/0/161939/ca8fae4f-c025-b648-f536-fd5afbd0c1a9.png)
![FireShot Capture 45 - - http___pysaml2.genbacloud.com_8087_.png](https://qiita-image-store.s3.amazonaws.com/0/161939/7739181d-b6d4-6cfb-84a0-cdf2d1c5ab5b.png)
Quittez l'exemple de programme.
```bash
./all.sh stop
```
Modifiez l'exemple de programme.
528a538
> "[adresse mail]": "[mot de passe]",
37a38,60
> "[adresse mail]": {
> "sn": "Testsson",
> "givenName": "Test",
> "eduPersonAffiliation": "student",
> "eduPersonScopedAffiliation": "[email protected]",
> "eduPersonPrincipalName": "[email protected]",
> "uid": "[adresse mail]",
> "eduPersonTargetedID": "one!for!all",
> "c": "SE",
> "o": "Example Co.",
> "ou": "IT",
> "initials": "P",
> "co": "co",
> "mail": "mail",
> "noreduorgacronym": "noreduorgacronym",
> "schacHomeOrganization": "example.com",
> "email": "[adresse mail]",
> "displayName": "Test Testsson",
> "labeledURL": "http://www.example.com/test My homepage",
> "norEduPersonNIN": "SE199012315555",
> "postaladdress": "postaladdress",
> "cn": "cn"
> },
Les paramètres du côté cybozu.com sont les mêmes que dans l'article précédent, alors reportez-vous à cela.
Stockez les métadonnées téléchargées du fournisseur de services cybozu.com (spmetadata.xml) dans un emplacement pratique.
Modifiez l'exemple de programme.
48a49,50
> from saml2.saml import NameID
> from saml2.saml import NAMEID_FORMAT_TRANSIENT
341a344,345
> nameid = NameID(
> format=NAMEID_FORMAT_TRANSIENT, text=identity["uid"])
344a349,350
> name_id=nameid,
> sign_response=True,
117c117,124
< "local": [full_path("../sp-wsgi/sp.xml")],
---
> "local": [full_path("../sp-wsgi/sp.xml"), full_path("[cybozu.Chemin relatif vers les métadonnées du fournisseur de services com]")],
> #"inline":
> #"remote": [
> # {"url": "",
> # "cert": ""}],
> #"mdfile":
> #"loader":
> #"mdq":
Après vous être connecté depuis l'écran de connexion pysaml2, si l'écran cybozu.com s'affiche, OK !!
Tout d'abord, installez pysaml2. Si vous exécutez sudo python setup.py install
et obtenez une erreur, vérifiez le journal et installez les bibliothèques nécessaires une par une.
Il en va de même pour l'exécution de l'exemple de programme. J'ai lancé ./all.sh start
pour installer les bibliothèques nécessaires.
Cherrypy semble inutile à moins qu'il ne soit 7.1.0, alors soyez prudent.
pycryptodomex n'est pas un pycryptodome, mais un pycryptodomex, alors soyez prudent là aussi.
Donc, ce à quoi j'étais le plus accro, ou pas sûr, était "7. Réglez le SP de cybozu.com du côté pysaml2".
Si . / Pysaml2-master / example / idp2 / idp.py
est laissé tel quel, l'erreur suivante sera affichée.
Si vous ajoutez sign_response = True,
à l'argument de create_authn_response
et traitez-le ...
Ensuite, l'erreur suivante s'affiche
J'avais l'impression de pouvoir ajouter name_id = nameid
et de travailler ensemble !!
. / Pysaml2-master / tests /
. Cela a pris du temps car c'était une réponse tout en comprenant les spécifications SAML. Quand j'ai fini, j'ai ajouté quelques lignes ...Pour le moment, c'était bien de pouvoir confirmer. Peut-être que je dois étudier un peu plus pour approfondir ma compréhension des spécifications SAML ...
Recommended Posts