没有OWIN身份验证管理器与此请求关联


70

在尝试对我的Web Api项目启用owin和AspNet身份(在VS 2013 + .Net 4.5.1中)后,我在每个有效或无效(对不存在的控制器的请求)请求中收到以下错误:

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
No OWIN authentication manager is associated with the request.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>
at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.SuppressDefaultAuthenticationChallenges(HttpRequestMessage request) at System.Web.Http.Owin.PassiveAuthenticationMessageHandler.<SendAsync>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.HttpServer.<SendAsync>d__0.MoveNext()
</StackTrace>
</Error>

当我在调试模式下检查时,也不会处理任何异常!我也意识到ConfigurationStartup类中永远不会被调用(实际上从来不会被调试器捕获)。这是启动代码:

[assembly: OwinStartup(typeof(bloob.bloob.Startup))]

namespace bloob.bloob
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }
    }
}

Answers:


98

我终于找到问题了!在逐行比较一个新创建的项目并没有发现任何差异之后,我检查了两个项目的引用,是的!...所有问题都来自缺少软件包:

Microsoft.Owin.Host.SystemWeb

我不知道为什么在软件包安装阶段会遗漏此软件包,但奇怪的是,为什么没有引发任何构建异常?或没有任何DLL参考错误?


您的答案需要详细信息。在何处添加此参考以及为什么会发生错误?
ahmadalibaloch '16

1
1-在您的mvc项目的dll中。2 -正如我所说,我不知道原因
马哈茂德Moravej

@ahmadalibaloch这就是省长
Mahmoud Moravej '16年

谢谢,它在我将它安装在nuget中后可以正常工作,现在我可以生成访问令牌
jefferyleo

Tools> NuGet Package Manager> Manage NuGet packages for Solution...> Browse>搜索并安装Microsoft.Owin.Host.SystemWeb
Uzair A.

98

我最初是使用身份验证创建该项目的,但后来决定禁用它。我必须在WebApiConfig.cs文件中删除它。如果要启用身份验证,请确保具有此名称。

        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

4
此代码块是为WebAPI配置身份验证的地方。删除它会禁用任何身份验证。
cal5barton

如果您只想关闭webapi管道中的所有身份验证,则可以注释掉上面的3行,对我有用!
AIDAN CASEY

嗯,我做到了,并添加了web.config设置key =“ owin:AutomaticAppStartup” value =“ false”,但仍然收到此错误
Sonic Soul

5
知道如何关闭身份验证非常有用,这确实会使错误消失。但是他的意图是启用身份验证,因此这并不能真正回答问题。
托德

8

我的情况是,由于web.config中的此设置,它失败了。希望这可以帮助某人避免这种情况。

<appSettings>
    <add key="owin:AutomaticAppStartup" value="false" />
</appSettings>

5

我有同样的问题。该软件包未出现在NuGet软件包管理器中。我在packages.config中添加了参考:

 <package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net45" />

并在项目文件(xxx.csproj)中进行引用:

 <Reference Include="Microsoft.Owin.Host.SystemWeb">
  <HintPath>..\packages\Microsoft.Owin.Host.SystemWeb.2.1.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll</HintPath>
</Reference>

3

如果您实际上不需要OWIN,则只需将其卸载即可。

一种方法是在Nuget Manager中卸载每个OWIN库,顺序将取决于它们的依赖关系。

完成此操作后,您不需要任何与OWIN相关的代码或配置。这对我来说最有效,因为我使用的是Windows身份验证。


3

owin:AutomaticAppStartup密钥更改为trueWeb.config对我来说已解决,即从以下项进行更改:

<appSettings>
    <add key="owin:AutomaticAppStartup" value="false" />
</appSettings>

对此:

<appSettings>
    <add key="owin:AutomaticAppStartup" value="true" />
</appSettings>

0

对于.Net框架,将runAllManagedModulesForAllRequests属性添加到web.config中的模块。这样我就保留了身份验证的存在。

<modules runAllManagedModulesForAllRequests="true">
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.