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 ?
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.
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.
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:
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
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
Configurer le processus brillant ou le serveur brillant pour écouter uniquement localhost (127.0.0.1)
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.
Voici n article de blog qui explique la configuration d'une authentification simple pour Apache Tomcat.
Jetez également un œil dans cet article pour le configurer dans IIS
La recherche SO ou le Web pour l'authentification de base devrait vous procurer quelques liens utiles et vous rapprocher.
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
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