web-dev-qa-db-fra.com

Sécurité dans une application R Shiny

Je souhaite publier une application Web R Shiny ( http://www.rstudio.com/shiny/ ) sur le Web, mais je souhaite la protéger par mot de passe afin que seules les personnes disposant des informations d'identification puissent voir ce que J'ai publié. Quelle est la meilleure façon de procéder ?

36
Nicholas Hamilton

C'est peut-être un peu tard mais je vais quand même répondre. Si vous avez déjà une solution, pouvez-vous la partager avec nous?

Mon objectif principal était très simple. J'avais une version fonctionnelle de l'application brillante sur mon ordinateur portable. J'avais l'habitude de l'exécuter comme mentionné ci-dessous, tout le temps pour tester localement.

R -e "shiny::runApp('.')"

Puis vint le moment où nous devions mettre cela sur une instance Amazon EC2.

Au début, ma tentative était de proxyer directement Apache sur le port 8100 sur lequel mon application écouterait. Mais cela n'a pas bien fonctionné car il semble que l'exécution du serveur de cette manière utilise en fait des sockets bruts où l'utilisation d'un serveur brillant revient à l'utilisation de sock.js, la communication se fait désormais via HTTP à la place.

Alors, téléchargez l'application shiny-server sur notre instance EC2 en suivant les instructions ici: https://github.com/rstudio/shiny-server

Btw, bien que les instructions là-bas vous recommandent d'installer node.js à partir de la source si vous utilisez une instance RHEL, cela a plutôt bien fonctionné pour moi en suivant la méthode d'installation yum. Vous avez ces instructions ici.

Après le node.js, installation et configuration de shiny-server, j'ai modifié ma conf Apache (Ubuntu et RHEL appellent la conf différemment. Modifiez donc celle que vous avez). Ajout d'un hôte virtuel pour répondre à mes demandes. Et comme vous pouvez le constater, masqué également avec un Autache de résumé Apache Basic avec la directive Apache Location.

<VirtualHost *:80>

    ProxyPass / http://localhost:3838/
    ProxyPassReverse / http://localhost:3838/
    ProxyPreserveHost On

    <Location />
        AuthType Basic
        AuthName "Restricted Access - Authenticate"
        AuthUserFile /etc/httpd/htpasswd.users
        Require valid-user
    </Location>

</VirtualHost>

En dehors de cela, vous avez également modifié la configuration de shiny-server pour écouter la demande de 127.0.0.1 uniquement (localhost uniquement). Donc, dans mon serveur brillant, j'ai les éléments suivants:

listen 3838 127.0.0.1;

Btw, vous n'en aurez pas besoin si vous êtes dans un environnement Amazon EC2 car vous pouvez utiliser le paramètre de groupe de sécurité dans votre tableau de bord EC2 pour faire de même. J'ai quand même fait ça comme une bonne mesure.

Pour l'instant, cela suffit car nous recherchions quelque chose de très rapide et simple.

Maintenant, nous attendons désespérément que les gens impressionnants de RShiny fournissent l'authentification dans le cadre de l'accord d'édition d'entreprise.

J'espère que cela t'aides.

23
shingav

Cela peut être un peu en retard pour l'OP mais cela peut être utile pour votre cas d'utilisation:

https://auth0.com/blog/2015/09/24/adding-authentication-to-shiny-open-source-edition/

C'est similaire à la réponse de Rohith, mais il utilise à la place Auth0, ce qui vous permet plus d'options d'authentification (comme la connexion, les comptes Google, Active Directory, LDAP et un grand etc.)

Avertissement: je travaille chez Auth0, nous utilisons Shiny en interne avec cette configuration et cela fonctionne très bien.

9
Sicarul

Un peu plus tard, mais j'ai trouvé une autre option en utilisant ngnix comme proxy:

Ce guide a été terminé en suivant partiellement cette directive: https://support.rstudio.com/hc/en-us/articles/213733868-Running-Shiny-Server-with-a-Proxy

Sur Ubuntu 14.04:

  1. Installer nginx
  2. Changez le fichier config /etc/nginx/nginx.conf en:

Ce:

events {
        worker_connections 768;
        multi_accept on;
}

http {

  map $http_upgrade $connection_upgrade {
      default upgrade;
      ''      close;
    }

  server {
    listen XX;



    location / {
      proxy_pass http://localhost:YY;
      proxy_redirect http://localhost:YY/ $scheme://$Host/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_read_timeout 20d;

      auth_basic "Restricted Content";
      auth_basic_user_file /etc/nginx/.htpasswd;
    }
  }
}

XX: Port que le nginx écoutera

YY: port utilisé par le serveur brillant

  1. En utilisant ce tutoriel, j'ai ajouté l'authentification par mot de passe au serveur nginx: https://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-nginx-on-ubuntu -14-04

  2. Configurer le processus brillant ou le serveur brillant pour écouter uniquement localhost (127.0.0.1)

5
Sergio Fernández

Cela pourrait être considéré comme une exigence HTTP plutôt qu'une fonction Shiny. Si tel est le cas, vous pouvez examiner la première implémentation d'une authentification HTTP et une fois les informations d'identification vérifiées, vous pouvez rediriger vers l'URL de votre application Shiny.

La recherche SO ou le Web pour l'authentification de base devrait vous procurer quelques liens utiles et vous rapprocher.

2
Ram Narasimhan

Pour le moment, il n'y a pas de façon simple de procéder. Cependant, nous publierons une version commerciale de Shiny Server dans un avenir proche. Nous ferons une version bêta dans le mois à venir et la sortie officielle avant la fin de l'année. Cela inclura la possibilité d'avoir une authentification par mot de passe pour vos applications Shiny. De plus, Shiny Server Pro aura des fonctionnalités concernant la sécurité, l'authentification, l'évolutivité, la surveillance du serveur et le support premium.

Un autre endroit où vous pourriez être en mesure d'obtenir des commentaires est la Shiny Mailing List . Il y a beaucoup d'utilisateurs actifs qui pourraient avoir des idées. Sinon, si vous souhaitez nous contacter directement à ce sujet, vous pouvez envoyer un e-mail à [email protected] et je vous répondrai.

Meilleur,

Josh

Chef de produit - RStudio

1
Josh Paulson

C'est trop tard pour la réponse, mais je pense qu'il y a un développement autour de la même chose. Vous pouvez utiliser Google Auth pour vous connecter aux applications Web brillantes. Il existe une solution sur différents threads, vous pouvez vous référer à: ShinyApp Google Login

0
Vikram Dhingra