Vérifiez l'authentification SAML de cybozu.com à partir de python (pysaml2)

0. introduction

Vérifions l'authentification SAML de cybozu.com à partir de python (pysaml2).

1. 1. Créer une instance EC2 pour Amazon Linux

  1. Sur la page de la console E2, sélectionnez l'AMI Amazon Linux et créez une instance EC2.
    • AMI ID :
      • amzn-ami-hvm-2017.03.0.20170417-x86_64-gp2 (ami-923d12f5)
    • Instance Type :
      • t2.micro
    • Security Groups :
      • SSH
      • HTTPS

  2. Attribuez ensuite une adresse IP Elastic.

2. Définir les paramètres initiaux et les paramètres de sécurité

  1. Définissez les paramètres initiaux généraux et les paramètres de sécurité.

3. 3. Installez pysaml2

  1. Téléchargez le fichier zip à partir du lien ci-dessous.

    wget https://github.com/rohe/pysaml2/archive/master.zip
    

1. Décompressez le fichier zip téléchargé et accédez au répertoire décompressé.
```bash
unzip master.zip
cd ./pysaml2-master
```

1. Installez pysaml2.
```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
```

4. Démarrez l'exemple de programme

  1. Accédez au répertoire de programme exemple.

    cd ./pysaml2-master/example
    

1. Installez les bibliothèques requises.
```bash
sudo pip install mako
sudo pip install "cherrypy==7.1.0"
sudo yum install xmlsec1 xmlsec1-openssl
sudo pip install pycryptodomex
```

1. Exécutez l'exemple de programme.
```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
```

5. Définir les paramètres de connexion externe

  1. 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
    

1. Ajoutez les paramètres suivants au groupe de sécurité. * TCP 8087 0.0.0.0/0 * TCP 8088 0.0.0.0/0

1. Stockez le fichier de certificat du serveur (clé publique, clé privée) dans un emplacement approprié pour la connexion HTTPS. * Clé publique du certificat serveur: * .cert * Clé privée du certificat serveur: * .key

1. Créez un nouveau certificat pour l'authentification.
```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
```

1. Modifiez l'exemple de programme.
* ./pysaml2-master/example/idp2/idp_conf.py
```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, ""),
```

1. Exécutez l'exemple de programme.
```bash
./all.sh start
```

1. Accédez au site suivant et connectez-vous.
* http://[FQDN]:8087/ * Les informations de connexion sont décrites dans `. / Pysaml2-master / example / idp2 / idp.py` (ligne 528). * N'utilisez pas `daev0001` car cela entraînerait une erreur !!
![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
```

6. Configurer un compte de lien côté pysaml2

  1. Modifiez l'exemple de programme.

    • ./pysaml2-master/example/idp2/idp.py
    528a538
    >     "[adresse mail]": "[mot de passe]",
    
    • ./pysaml2-master/example/idp2/idp_conf.py
    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"
    >     },
    

1. Exécutez l'exemple de programme et vérifiez votre connexion au site.

7. Effectuer les réglages du côté cybozu.com

Les paramètres du côté cybozu.com sont les mêmes que dans l'article précédent, alors reportez-vous à cela.

  1. Définissez SP sur cybozu.com
  1. Ajouter des utilisateurs liés à cybozu.com

8. Réglez le SP de cybozu.com du côté pysaml2

  1. Stockez les métadonnées téléchargées du fournisseur de services cybozu.com (spmetadata.xml) dans un emplacement pratique.

  2. Modifiez l'exemple de programme.

    • ./pysaml2-master/example/idp2/idp.py
    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,
    
    • ./pysaml2-master/example/idp2/idp_conf.py
    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":
    

1. Exécutez l'exemple de programme, accédez au site cybozu.com et vérifiez votre connexion.

Après vous être connecté depuis l'écran de connexion pysaml2, si l'écran cybozu.com s'affiche, OK !!

99. Point addictif

Si vous ajoutez sign_response = True, à l'argument de create_authn_response et traitez-le ...

J'avais l'impression de pouvoir ajouter name_id = nameid et de travailler ensemble !!

XX. Résumé

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

Vérifiez l'authentification SAML de cybozu.com à partir de python (pysaml2)
Essayez l'authentification de base de données IAM à partir de Python
Vérifier les modules installés à partir du script Python
MeCab de Python
Authentification Python Https
Utilisez Thingsspeak de Python
Touchez MySQL depuis Python 3
Exploitez Filemaker depuis Python
Utiliser fluentd de python
Accéder à bitcoind depuis python
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Utilisez MySQL depuis Python
Exécutez Python à partir d'Excel
Installer Python à partir de la source
Exécuter des commandes depuis Python
Faites fonctionner le neutron de Python!
Utiliser MySQL depuis Python
Faire fonctionner LXC depuis Python
Manipuler riak depuis python
Forcer Python depuis Fortran
Vérification de domaine avec Python
Utilisez BigQuery depuis Python.
Exécuter la commande depuis Python
Python # Vérifier l'identité du type
[Python] Lire depuis Stdin
Vérifier la version avec python
Utilisez mecab-ipadic-neologd de Python