问题标签 [owin-middleware]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
13847 浏览

c# - 我应该使用 OwinContext 的环境来保存每个请求的应用程序特定数据吗

我需要一种方法来存储每个请求的日志记录对象。使用 HttpContext 我会将其添加到项目字典中。如果我能提供帮助,我不想将 HttpContext 带入其中。下面的代码是我为 Unity LifeTimeManager 提出的,它将对象存储在 OwinContext 的 Environment 属性中,我可以使用我的 Owin 中间件访问该属性。

然后我可以从我的中间件中像这样使用它:

我突然想到,我可以选择任何我想要的键,除了那些已经被 Owin 保留的键。有什么理由我不应该为此目的使用 OwinContext.Environment 吗?MSDN 文档对此的最佳实践含糊不清。

Darrel Miller 在这里的回应:当使用 OWIN 来自托管 ASP.NET Web API 时,我应该如何存储每个请求的数据让我相信请求对象上的属性集合是可行的方法。如何从中间件访问此对象?

0 投票
3 回答
5139 浏览

c# - 使用 Owin 中间件添加声明

Owin 中间件实现是否可以在执行 Web API 控制器之前添加声明?

创建了一个 OwinMiddleware 实现并添加了一个身份:

但是,即使调用此Invoke方法,身份也不会更新(只是内部声明数组)。并且控制器在执行时当然永远不会获得新的虚拟声明。

想法?

0 投票
2 回答
1536 浏览

angularjs - 在 SPA 中返回视图时的 AngularJS、.NET Web API 和后端授权

所以我想使用 AngularJS 和 .NET Web API 编写一个 SPA。我希望 Angular 处理大部分路由。但是如何防止未经授权的用户(无论身份验证如何)获得某些视图?我想在后端执行此操作,而不涉及 .NET MVC,因为 MVC 返回整个视图,这违背了 SPA 的目的。同样据我了解,Web API 在将视图返回给客户端方面没有任何作用。鉴于这是正确的,当返回请求的视图时,Web API 和 MVC 中的授权在 SPA 中变得无用。我考虑编写一些 OWIN 中间件来检查传入 AJAX 调用的标头,然后确定用户是否有权接收视图。但我不知道从哪里开始。如果编写 OWIN 中间件来处理授权是现实的,我从哪里开始?

这看起来合理吗?还是我只是疯了,我应该让 .NET MVC 处理返回的视图?

跟进:MVC 和 Web API 都有 [Authorize] 装饰,并且正在传递一个令牌。认证没问题。问题在于 Angular。当 Angular 处理路由时,它会从服务器请求一个视图。但是服务器不会进入 .NET MVC 或 Web API,从而绕过 MVC 和 Web API 中的授权。它只是返回视图。有前端授权,但这并不理想。因此,当用户被授权接收该视图时,我需要后端来处理返回的视图。

0 投票
1 回答
161 浏览

facebook - 为 Microsoft.Owin.Security.Facebook 的质询 URL 指定“显示”查询字符串字段

我正在使用 Microsoft.Owin.Security.Facebook 3.0.1 NuGet 包将 Facebook 身份验证添加到我的 Web API 2.2 应用程序中。我有这样的代码,当用户尝试登录时,微软的中间件将他们重定向到 Facebook 的 OAuth 对话框,其 URL 如下:

我希望生成的 HTTP 302 呈现 Facebook 的特定于弹出式版本的身份验证对话框。Facebook 的文档说我可以将display查询字符串字段的值设置为popup. display不幸的是,微软的 Facebook 中间件似乎没有设置。事实上,在反编译内部Microsoft.Owin.Security.Facebook.FacebookAuthenticationHandler类时,我发现了这段代码:

似乎无法自定义身份验证处理程序生成的 URL。

我的问题是,有没有人遇到过这个问题并解决了它?我可以在管道的其他地方做些什么来以某种方式添加display到 URL 中吗?我需要使用 Facebook 的 OAuth 对话框的弹出版本。

我尝试了一个委托处理程序,我看到它拦截了管道中生成的 HTTP 401,但它没有拦截 HTTP 302。

顺便说一句,将其作为功能请求的合适位置在哪里?

0 投票
1 回答
2418 浏览

c# - 为什么在HttpRequest结束后第二次创建owin中间件

询问了为什么ApplicationDbContext每次请求都会创建和处理两次来自 Asp.Net 的身份之后,我做了一些研究,为什么会发生这种情况。我发现实际上ApplicationDbContext每次创建一次,HttpRequest但是在使用 Owin 管道时,将在 HttpRequest 结束后第二次创建 Owin 中间件。

因此,ApplicationDbContext当用户单击一个链接时,确实会第二次创建该对象,给人的印象是该对象每次创建两次WebRequest

经过大量研究后,我决定在不使用任何身份验证的情况下开始一个普通的 MVC 5 项目。从 NuGet 添加 Owin 中间件后,我创建了以下Owin Middleware组件。它基本上检查字典中是否存在某些假对象,HttpContext并在不存在时创建一个。输出被写入调试窗口以保持简单。

然后将此添加到 的IndexActionMethodHomeController以检查创建的对象是否仍然存在。

运行时,输出窗口显示以下输出(为清楚起见添加了注释):

那么,为什么在注释之后end of 'normal' request,中间件又被创建并输入了呢?任何人有任何想法或解释?

重现步骤:

  1. 在 VS 2013 中启动一个新的 MVC 5 项目,无需身份验证
  2. Install-Package Microsoft.Owin.Host.SystemWeb在包管理器中使用 NuGet 添加 Owin
  3. 如上图在项目中添加启动类
  4. 将代码添加到IndexActionMethod 的HomeController
  5. 在调试模式下按 F5
  6. 单击开始页面上的“主页”链接
  7. 在输出(或立即取决于您的 VS 设置)窗口中观看输出
0 投票
1 回答
671 浏览

authentication - 基于 OWIN cookie 的身份验证中间件无法更改 cookie 名称

我正在尝试通过执行以下操作来重命名身份验证 cookie:

当我从 IIS Express 运行应用程序并检查 Fiddler 中的 cookie 名称时,cookie 名称按预期设置为“mycookiename”。但是,当我部署站点时,cookie 名称仍设置为“.AspNet.ApplicationCookie”。关于如何让这个改变发挥作用,我有什么遗漏吗?IIS 中有什么东西可以覆盖我的应用程序设置吗?

0 投票
2 回答
2550 浏览

owin - HelloWorldComponent 和 System.Func`2[System.Collections.Generic.IDictionary`2// 参数名称:签名之间没有可用的转换

我正在学习 Scott Allen 在 Pluralsight 上的 MVC 5 Fundamentals 课程

我在下面的代码中的“使用 (WebApp.Start(uri))”处收到错误。

错误是

代码是

packages.config 是

我想知道没有用来获取此消息,所以我想知道可能会发生什么变化

0 投票
2 回答
1078 浏览

forms-authentication - ASP .NET 5 (MVC6) 外部表单身份验证

我目前正在研究这个问题的优雅解决方案,但我想在这里提出这个问题,以获得任何关于这个问题的建议/建议/答案。

我正在使用客户端用于身份验证的身份验证系统(表单身份验证)。

当前步骤:

  1. 重定向到 URL 以进行表单身份验证。
  2. 输入用户名/密码
  3. 取回表单数据。具体来说:Context.Request.Form["Token"]

我能够执行所有这些步骤。我试图想出让中间件来解决这个问题的正确途径。我目前想知道是否可以简单地使用 Microsoft.AspNet.Authentication.Cookies 来解决这个问题。使用这种方法,我将实现自己的 ICookieManager 来查看表单数据。

建议/建议/答案?

先感谢您!

0 投票
2 回答
851 浏览

facebook - 如何通过 ASP.NET Identity 的 FacebookAuthenticationProvider 传递自定义声明?

从 Visual Studio 的“Web API”项目模板开始,我尝试向/Api/Account/ExternalLogin端点创建的令牌添加自定义声明。我通过回调添加这些FacebookAuthenticationProvider.OnAuthenticated,但它们不会持续到OAuthAuthorizationServerProvider.AuthorizationEndpointResponse().

注意:我正在使用 Rahul Nath 在他的文章ASP.NET Web API 和外部登录 - 使用社交网络进行身份验证 中记录的类似方法

代码

在我Startup.Auth.cs的类的ConfigureAuth()方法(从OwinStartup类的Configuration()方法中调用)中,我向属性添加了一个回调函数OnAuthenticated,以便设置单个声明,foo其值为bar

然后我将FacebookAuthenticationProvider实例添加到一个新FacebookAuthenticationOptions对象:

并将其传递给 OWIN 的UseFacebookAuthentication()方法:

结果

如果我在回调中放置一个断点,OnAuthenticated我可以看到正在添加我的自定义声明,以及许多其他声明(包括来自urn:facebook命名空间的几个声明)。到目前为止,一切都很好。

AuthorizationEndpointResponse()但是,当我在 Facebook 身份验证后通过我的类的方法检查我的声明时,集合OAuthAuthorizationServerProvider中只有两个可用的声明:context.Identity.Claims

所有urn:facebook声明都已删除,我的自定义foo声明也是如此。我假设管道中的其他位置正在使用一组准系统声明重新创建身份,但我不确定在哪里。

想法?

0 投票
1 回答
434 浏览

c# - C# Owin Self Host - 预期标头 100-继续

我们在使用 OWIN 和自托管时遇到了问题。我们有从控制台应用程序运行的网络服务器。它不在 IIS 上运行。

HTTP 100-continue 规范: http ://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3

OWIN 100-continue 规范: http ://owin.org/html/owin.html

什么/在哪里/如何处理期望:请求中的 100-continue 标头?我们正在使用简单的引导程序: