作为非管理员用户运行OWIN自托管应用程序需要哪些权限?

时间:2018-02-01 20:18:15

标签: c# .net owin

允许用户启动侦听非本地主机IP的OWIN自托管Web服务需要什么权限?

我试图在命令行app / windows服务中运行自托管的Web服务。

我一直在尝试很多事情。

应用程序在机器mydomainname上运行,IP地址为192.168.0.153:

  1. 我构建应用程序,以便WebApp.Start()使用url" http://localhost:9980/"

    进行初始化
    • 我可以像普通用户一样运行应用程序。
    • 如果同一台计算机上的客户端对" http://localhost:9980/ ..."进行了调用,则一切正常。
    • 如果同一台计算机上的客户端对" http://127.0.0.1:9980/ ..."进行了调用,则会收到HTTP 400 - 无效的主机名。
    • 不在同一台计算机上的客户端无法访问Web服务,只是期望。
  2. 我构建应用程序,以便WebApp.Start()使用url" http://+:9980/"

    进行初始化
    • 如果我以普通用户身份运行应用程序,我会得到一个"访问被拒绝"异常。
    • 如果我以管理员用户身份运行应用程序,那么事情就有效了。
    • 如果同一台计算机上的客户端对" http://localhost:9980/ ..."进行了调用,则一切正常。
    • 如果同一台计算机上的客户端对" http://127.0.0.1:9980/ ..."进行了调用,则一切正常。
    • 如果同一台计算机上的客户端对" http://mydomainname:9980/ ..."进行了调用,则一切正常。
    • 如果我没有在端口9980上启用入站规则,当然不在同一台计算机上的客户端会超时。
    • 如果我在端口9980上启用了入站规则,则不在同一台计算机上的客户端工作正常,使用mydomainname或IP地址192.168.0.153。
  3. 但事情就是这样 - 我不能把它交给那些要求以管理员身份运行的操作。

    1. 所以我尝试构建应用,以便WebApp.Start()使用多个网址进行初始化:" http://localhost:9980/"," http://127.0.0.1:9980/&#34 ;," http://mydomainname:9980/"。 (注意 - 不包括192.168.0.153)。

      • 当我以非管理员身份运行时,我得到了#34;访问被拒绝"例外,再次。
      • 当我以管理员身份运行时,它可以正常工作。
      • 使用localhost的本地客户端。 127.0.0.1和mydomainname工作,使用机器IP地址的本地客户端不工作。
      • 使用mydomainname工作的远程客户端,使用192.168.0.153的远程客户端不工作。
    2. 所以我尝试构建应用程序,以便WebApp.Start()使用多个localhost网址进行初始化:" http://localhost:9980/"," http://127.0.0.1:9980/&# 34 ;.

      • 当我以非管理员身份运行时,工作正常。
    3. 所以我尝试构建应用程序,以便WebApp.Start()使用" http://192.1680.153:9980/"初始化。 (服务器计算机的IP地址)。

      • 当我以非管理员身份运行时,我得到了#34;访问被拒绝"例外,再次。
    4. 我一直在浏览试图寻找建议,对于所有这一切,我已经看过帖子说我需要使用netsh来配置urlacl,帖子说我可以&#39没有配置任何urlacls,我从任何人身上看到的任何内容都没有表明任何人对于它的工作方式或应该如何工作有任何明确的答案。

      我似乎很清楚,为了启动OWIN,用户必须拥有一些特定权限才能侦听非本地主机IP。该管理员拥有它,我的正常登录没有。

      有没有人知道这个权限可能是什么,以及如何将其授予普通登录用户?

      我无法提供需要管理员权限才能运行的应用。

      但是,我可以提供一个应用程序,该应用程序在没有配置某些特定权限的用户运行时,以" HEY退出!您需要授予用户权限XXX"。

      但是,允许用户启动侦听非本地主机IP的OWIN自托管Web服务需要什么权限?

1 个答案:

答案 0 :(得分:1)

L.B的评论包括正确答案 - 我需要授予用户打开该特定端口的权限。

我修改了应用以识别该特定错误。当它抓取TargetInvocationException InnerException HttpListenerException并且ErrorCode == 5时,我会显示一条错误消息,告诉用户具体需要做什么:

  

在端口上启动WebApp:9980

     

错误用户无权在端口9980上启动webservice。

     

要授予用户在此计算机上启动Web服务的权限,请在管理控制台中运行(一次):

     
    

netsh http add urlacl url = http://+:9980/ user =< username>

  
     

或:

     
    

netsh http add urlacl url = http://+:9980/ user = EVERYONE