web-dev-qa-db-fra.com

Exécution de l'API Web OWIN auto-hébergée sous un compte non administrateur

Est-il possible qu'une API Web OWIN auto-hébergée s'exécute sous un compte non administrateur? J'ai déjà essayé des dizaines de réservations d'URL et rien ne fonctionne. Le service ne parvient pas à démarrer avec "Accès refusé". Cela fonctionne lorsque le compte est ajouté au rôle d'administrateur, mais je ne le souhaite pas. Le code ci-dessous est exécuté sur Win 7 Framework 4.5.2. 

//install-package Microsoft.owin.hosting
//install-package Microsoft.Owin.Host.HttpListener

StartOptions options = new StartOptions();
options.Urls.Add("http://localhost:5000/");
//options.Urls.Add(string.Format("http://{0}:5000", Environment.MachineName));
//options.Urls.Add("http://+:5000/");
//options.Urls.Add("http://*:5000/");

using (WebApp.Start<WebAPISelfHostMinimal.Startup>(options))
{
    while (!Terminate)
    {
        await Task.Delay(10); //keep cpu from getting pegged
    }

    LogUtil.LogInfo("Terminating owin Host.");
}

EDIT- cela fonctionne sous un compte Windows.

C:\>netsh http add urlacl http://+:5000/ user=mini2012\svcAPI

URL reservation successfully added

C:\>sc start apiservice
[SC] StartService FAILED 5:

Access is denied.

C:\>netsh http add urlacl http://*:5000/ user=mini2012\svcAPI

URL reservation successfully added

C:\>sc start apiservice
[SC] StartService FAILED 5:

Access is denied.

C:\>netsh http add urlacl http://localhost:5000/ user=mini2012\svcAPI

URL reservation successfully added

C:\>sc start apiservice
[SC] StartService FAILED 5:

Access is denied.
37
Colin Superdog

On dirait que le problème vient de la réservation de l'URL. Je n'en ai pas eu besoin S'il y a une réservation d'URL, cela empêchera simplement l'hôte owin de commencer par l'erreur d'accès refusé. En outre, le port par défaut pour owin Host est 5000. Si un processus "inactif" est toujours en cours d'exécution sur ce port, il empêchera votre service de démarrer. Pour vérifier, vous pouvez exécuter netstat -a -b à l'invite de commande. 

15
Colin Superdog

Votre service est en cours d'exécution (probablement) sous le compte LocalSystem (SYSTEM). Ce compte ne figure pas dans le principal de sécurité Tout le monde. 

En résumé, pour résoudre ce problème, effectuez la réservation d'espace de noms pour la connexion anonyme ou modifiez votre service pour qu'il s'exécute sous le compte de service réseau qui se trouve être dans le principal Tout le monde. 

La troisième option consiste bien entendu à créer un nouvel utilisateur local/de domaine, à créer la réservation correspondante et à faire fonctionner le service sous ce compte. Mais vous devrez alors vous inquiéter de la définition d'autorisations de sécurité appropriées. Par conséquent, je choisirais l'une des deux premières options. 

5
Marcel N.

Pour quelqu'un qui cherche une solution et qui n'a pas lu le texte.

La solution consiste à exécuter Visual Studio en tant qu'administrateur.

3
Mo D Genesis

Exécuter cette ligne de commande sous admin

netsh http add urlacl url = http: // *: 8080/user = MyUser

0
Sergii Lebid