问题标签 [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.
asp.net - 倒带请求正文流
我正在重新实现一个请求记录器作为 Owin 中间件,它记录所有传入请求的请求 url 和正文。我能够读取正文,但如果我这样做,我的控制器中的正文参数为空。
我猜它是空的,因为流位置在末尾,所以当它试图反序列化主体时,没有什么可读取的了。我在以前版本的 Web API 中遇到了类似的问题,但能够将 Stream 位置设置回 0。这个特定的流会引发This stream does not support seek operations
异常。
在最新版本的 Web API 2.0 中,我可以Request.HttpContent.ReadAsStringAsync()
在我的请求记录器中调用,并且主体仍会完整地到达控制器。
阅读后如何回退流?
或者
如何在不使用请求正文的情况下读取它?
c# - 如何使用 OWIN 中间件重写版本化 url 以请求静态文件?
例如,我有一个文件位于服务器上/Content/static/home.html
。我希望能够向/Content/v/1.0.0.0/static/home.html
(版本控制)发出请求,并让它重写 url,以便它使用 OWIN 中间件在正确的 url 访问文件。
我目前正在使用 URL 重写模块(一个 IIS 扩展),但我想在 OWIN 管道中进行这项工作。
asp.net - OWIN 中间件的 CurrentPrincipal.Identities 有不同的声明集
今天我正在为 Oauth 中间件配置授权提供程序,并尝试将一些 guid 值插入到 Thread.CurrentPrincipal.Identity.Claims 中。但是当我试图调用 Thread.CurrentPrincipal 的 FindFirst 时,我什么都没有。
这是我试图做的例子:
检查内部属性,发现 Thread.CurrentPrincipal.Identity 仍然包含我之前设置的声明,但 Thread.CurrentPrincipal.Identities[0] - 没有。因此,有两个不同的身份实例具有自己的一组声明。
我尝试在 Web Api 控制器的操作中执行相同的步骤,并且 Identity 引用了 Identities[0],这意味着存在相同的实例。
OWIN 中间件的 Currentprincipal 发生了什么,所以它的 Identity 和 Identities[0] 指的是不同的实例?谁能给我解释一下,好吗?
谢谢!
oauth-2.0 - 根据请求更改 OWIN Auth 中间件(多租户,每个租户的 oauth API 密钥)
我有一个多租户应用程序。每个租户都可以通过 Facebook、Twitter、Google 等使用 OAUTH-2 对其用户进行身份验证。每个租户都有自己的用于上述服务的 API 密钥。
设置 OWIN 管道的典型方法是在 Startup 中“使用”身份验证提供程序,但这会在应用程序启动时设置 API 密钥。我需要能够为每个请求更改每个 oauth API 使用的密钥。
我需要能够根据租户的每个请求更改这些设置。我怎样才能做到这一点?
c# - Owin 仅提供特定文件夹中的文件
所以我在玩 Owin 和 Katana,我想在我的公共文件夹中提供静态文件。
我有一个包含样式表的内容文件夹和一个脚本文件夹。
我的启动:
因此,如果我浏览到 localhost:8861/ 我会转到我的公共文件夹中的 index.html 文件。没关系。但我也可以浏览到我想要阻止的 localhost:8861/Content/style.css。用户需要的所有东西都应该可以在公共文件夹中访问。其余的都应该被阻止。
我怎样才能做到这一点?
azure - OWIN Authentication
I have an Azure WebRole (MVC app) and Azure Worker role.
Now, I have my SignalR hubs hosted in the Worker Role using Owin.SelfHost.
The MVC app need to call this hubs in the worker role - which is quite straightforward.
Now my problem is authentication.
I need to access the WebRole's Context.User.Identity on the webrole so that I can still authenticate the calls to my hubs.
Worker Role
Currently - im stuck with this
Somehow, I need to pass the User.Context (Asp.net identity) from my WebRole to the Owin Pipeline in the worker role.
Any idea how to do that?
c# - 如何安全地拦截自定义 Owin 中间件中的响应流
我正在尝试编写一个简单的OWIN中间件,以拦截响应流。我想要做的是用自定义的基于 Stream 的类替换原始流,在那里我将能够拦截对响应流的写入。
但是,我遇到了一些问题,因为我不知道响应何时被链中的内部中间件组件完全写入。永远不会调用 Stream的Dispose
覆盖。所以我不知道什么时候该执行我的处理,这应该发生在响应流的末尾。
这是一个示例代码:
正如我在上面代码的注释中提到的那样,我可以想到两种策略来检测响应是否完整。
a) 我可以记录写入响应流的字节数并将其与预期的响应长度相关联。然而,在使用分块传输编码的响应的情况下,长度是未知的。
b)我可以决定在响应流Dispose
上调用时响应流是完整的。但是,OWIN/Katana 基础结构从不对替换的流调用 Dispose。
我一直在研究Opaque Streaming以查看操作底层 HTTP 协议是否是一种可行的方法,但我似乎没有发现 Katana 是否支持 Opaque Streaming。
有没有办法实现我想要的?
c# - 使用 AuthenticationHandler 的通用应用程序中的 Azure 移动服务自定义 LoginProvider 重定向问题
问题:
MobileServiceClient.LoginAsync 永远不会退出登录对话框 - 即使在返回访问令牌之后也是如此。
环境:
- 后端: Windows Azure 移动服务 .Net/C#
- 前端: Windows 8.1 通用商店应用程序。.Net/C#
细节:
在我的应用程序中,以下代码无法从第二行显示的对话框返回:
推测:
我怀疑我的自定义 AuthenticationHandler 中用于处理挑战的代码主要是罪魁祸首。我重写 ApplyResponseChallengeAsync 的 AuthenticationProperties 中的 RedirectUri 始终为 null - 因此它将重定向 uri 设置为请求 uri。
代码如下所示:
尝试解决
- 使用 WebAuthenticationBroker 而不是 MobileServiceClient 并明确提供回调 uri。
- 删除重新分配以重定向 uri。
- 切换重定向和请求 uri。
- 把盐撒在我肩上。
- 使用服务上的测试前端来导航和测试登录。
- 使用 HttpClient 并使用以下参数键显式构造请求:“redirect_uri”、“redirect_url”、“redirectUrl”、“redirectUri”。
- 给山羊流血
- 将 AuthenticationOptions 的 CallbackPath 值更改为“/signin-SmartThings”。
- 等待诸神黄昏
额外细节
我必须创建一个自定义 LoginProvider 和 OWIN 中间件来将我的自定义 AuthenticationHandler 注册到 owin 管道中。这似乎已正确设置,但我的 AuthenticationHandler 的实现可能是错误的。如果这有助于加快解决此问题,我很乐意应要求提供更多详细信息。
更新:
当尝试使用提供的回调 uri 从 WebAuthenticationBroker 登录时,SmartThings 的响应在正文中给出了“redirect_mismatch”错误。
但是,在浏览器中导航时,重定向 uri 被处理为“ https://hana.azure-mobile.net/signin-SmartThings?code=somemassivecode ”
这让我有点困惑,因为我希望看到一个访问令牌,而不是身份验证令牌,作为重定向 uri。
owin - OWIN 中间件 AuthenticationHandler AuthenticateCoreAsync 返回 null 时的异常
我正在尝试编写一个自定义的 Owin 身份验证中间件。我目前只写一个比这更简单的假人。
根据这个和其他教程,似乎我可以在我的 DummyAuthenticationHandler的AuthenticateCoreAsync中返回 null 以指示身份验证失败。所以我做了
如果我返回一个包含一些虚拟 ClaimsIdentity 的新 AuthenticationTicket 是可以的,但是当我返回 null 时,当我调用任何控制器时都会出现此异常。
我一直在将 Web Api 2 与 Ninject 一起使用,但似乎即使我尝试在 Startup 中注释掉 Niject 的内容,它仍然无法正常工作。我所有的依赖都是最新的。这是我的启动。
我一直在挠头一天,真的很想得到一些帮助。
c# - 如何使用 Owin 中间件拦截 404
背景
首先让我解释一下背景。我正在开发一个项目,该项目试图将使用通过 OWIN 配置的 Web API 配置的后端服务器(现在托管在 IIS 上,但将来可能会使用其他 OWIN 支持的主机)与使用 AngularJS 的前端结合。
AngularJS 前端是完全静态的内容。我完全避免使用 MVC/Razor、WebForms、Bundles 等服务器端技术,以及与前端及其使用的资产有关的任何东西,而是使用 Node.js、Grunt/Gulp 等最新最好的技术. 处理 CSS 编译、捆绑、缩小等。由于我不会在这里讨论的原因,我将前端和服务器项目放在同一个项目中的不同位置(而不是直接将它们全部放在 Host 项目中(见粗略)下图)。
所以就前端而言,我需要做的就是让我的主机为我的静态内容提供服务。在 Express.js 中,这是微不足道的。使用 OWIN,我可以使用Microsoft.Owin.StaticFiles中间件轻松完成此操作,并且效果很好(非常流畅)。
这是我的OwinStartup
配置:
抓住
基本上,它只是将所有内容都托管在frontend/MyProjectApp
MyProject.Host 的根目录中。所以很自然,如果您请求一个不存在的文件,IIS 会生成一个 404 错误。
现在,因为这是一个 AngularJS 应用程序,并且它支持html5mode
,所以我将有一些不是服务器上的物理文件的路由,而是在 AngularJS 应用程序中作为路由处理。如果用户要拖放到 AngularJS(index.html
在此示例中,不是物理存在的文件或文件),即使该路由在 AngularJS 应用程序中可能有效,我也会得到 404。index.html
因此,如果请求的文件不存在,我需要我的 OWIN 中间件返回该文件,并让我的 AngularJS 应用程序确定它是否真的是 404。
如果您熟悉 SPA 和 AngularJS,这是一种正常且直接的方法。如果我使用 MVC 或 ASP.NET 路由,我可以将默认路由设置为返回 myindex.html
或类似内容的 MVC 控制器。但是,我已经声明我没有使用 MVC,并且我正在尝试使其尽可能简单和轻量级。
这位用户也有类似的困境,并通过 IIS 重写解决了这个问题。就我而言,它不起作用,因为a)我的内容实际上并不存在于重写URL模块可以找到它的地方,所以它总是返回index.html
b)我想要一些不依赖IIS但在内部处理的东西OWIN中间件,可以灵活使用。
TL; DNR 我,大声哭泣。
很简单,如何拦截 404 Not Found 并使用 OWIN 中间件返回 my -served的内容(注意:不重定向) ?FileServer
index.html