问题标签 [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 回答
1104 浏览

c# - 当 redirect_uri 包含查询字符串参数时,DotNetOpenAuth 拒绝访问令牌请求

我正在使用 OWIN 中间件开发 OAuth v2 授权服务器,并且我正在尝试实现OAuth2 授权代码授予流程,但我遇到了一个问题,如果 redirect_uri 包含查询字符串参数和资源所有者,我的客户端会收到错误必须进行身份验证。

客户端能够请求身份验证代码,但是当它尝试将代码交换为访问令牌时,授权服务器以“400 错误请求”的 HTTP 状态和以下响应正文进行响应。

如果redirect_uri 不包含查询字符串参数,或者如果客户端在请求授权码之前将其删除,那么它可以完美运行。如果资源所有者已经通过授权服务器进行了身份验证,那么它也可以工作。

我的客户正在使用 DotNetOpenAuth 并使用 Glimpse 我可以看到 redirect_uri 在授权代码请求和访问令牌请求之间是一致的。

Glimpse 日志中的故障如下所示:

但是,如果我从 redirect_uri 中省略查询字符串参数,它会起作用:

同样,如果我在使用客户端之前登录到授权服务器,它可以工作:

OWIN 授权服务器的 OAuthAuthorizationServerProvider 对成功的访问令牌授权代码请求执行以下方法:

  • Provider.OnMatchEndpoint
  • Provider.OnValidateClientAuthentication
  • AuthorizationCodeProvider.Receive
  • Provider.OnValidateTokenRequest
  • Provider.OnGrantAuthorizationCode
  • Provider.OnTokenEndpoint
  • AccessTokenProvider.OnCreate
  • RefreshTokenProvider.OnCreate
  • Provider.OnTokenEndpointResponse

然而一个不成功的访问令牌授权码请求只涉及以下方法:

  • Provider.OnMatchEndpoint
  • Provider.OnValidateClientAuthentication
  • AuthorizationCodeProvider.Receive

AuthorizationCodeProvider.OnReceive 具有以下实现:

在调试器中,我可以看到一个有效的令牌,从 _repo 成功检索序列化票证,以及在方法完成之前上下文对象中的反序列化票证。不会抛出异常。成功和失败请求之间的流程看起来相同,因此我不清楚失败的原因,并且诊断工具事件日志在请求处理期间没有显示任何异常,只是线程在 ReceiveAuthenticationCode 完成后退出。

看起来问题出在我的测试客户端上,因为我能够使用Brent Shaffer 的 OAuth2 Demo PHP live demo重现完全相同的问题。

测试客户端基于 DotNetOpenAuth:

知道我可能在 DotNetOpenAuth 上做错了什么吗?为什么我在服务器端看不到无效请求?

0 投票
1 回答
1009 浏览

asp.net - ASP.NET Core RC1 MVC 6 - 如何从中间件访问 UrlHelper 并创建 Url 到 Action

我正在尝试使用中间件重定向 301 旧 URL。

如您所见,我使用的是 MapWhen 方法,这限制了我在 RedirectFromPost 方法中实例化我的 IUrlHelper 实例。ServiceProvider 给了我一个空实例,没有正确使用 IUrlHelper.Action() 所需的 ActionContext。

有没有人遇到过类似的挑战并对我有见识?

0 投票
1 回答
746 浏览

c# - 使用 Owin.Host.SystemWeb 异常中间件托管的 AspNet WebApi 无法捕获 POST 请求

我有一个使用 Microsoft.Owin.Host.SystemWeb 托管在 Owin 中的 AspNet WebApi 2 的项目,该项目使用 Owin 中间件实现异常处理并通过 httpConfiguration 添加 IExceptionHandler,如本文所述

在下面的项目中,我有一个控制器,它使用 Get 和 Post 的端点抛出异常。创建获取请求时,我从 Owin 异常中间件获得了预期的响应;

在此处输入图像描述

但是,在发出 post 请求时,中间件被跳过并返回以下内容;

在此处输入图像描述

似乎 post 请求跳过中间件并返回 500,然后再将其发送给 Owin 异常处理程序。我希望能够捕获发布请求异常并记录它。知道该怎么做吗?是什么导致 post 和 get 之间的不同行为?

示例回购和代码片段;

https://github.com/timReynolds/WebApiExceptionDemo

OwinExceptionHandler 中间件

示例异常记录器

启动

0 投票
2 回答
610 浏览

asp.net-web-api2 - 如何在 WS-Federation 中使用 OAuth 承载调用样式在 WebAPI 中进行身份验证?

OWIN 中间件库中是否有现成的 Ws-Federation 身份验证扩展,以使用身份验证标头而不是 cookie 处理 Web API?

我知道如何编写自定义处理程序来提取令牌并对其进行验证,但我可以避免这种情况吗?

0 投票
1 回答
2658 浏览

asp.net-mvc - 剖析 OAuth Bearer 身份验证的 ASP.NET MVC 身份

我正在学习如何使用 Asp.Net MVC Identity 2.0。

我有适用于 OAuth Bearer 的代码

这是 Startup.Auth.cs 的代码

我查看了 ClaimsIdentity 和 AuthenticationTicket 的源代码,但没有看到票证是如何为身份注册的。

我的问题是这张票是如何在 Owin 管道中注册的?

我的目标是尽可能撤销这张票。

提前致谢。

0 投票
3 回答
676 浏览

asp.net-web-api - OWIN 在 OData $batch 请求中失去身份

我正在尝试将我的标准 WebApi 应用程序移至 OWIN,但在身份和 $batch 请求方面存在问题。

我目前有一个DelegatingHandler检测并分配身份的SendAsync

对于正常的请求,这会一直持续到ODataController.User. 但是,在$batch请求时,属性会返回到未经身份验证的ClaimsIdentity.

甚至GetOwinContext返回一个IOwinContext没有任何用户的。我假设它为每个批次部分创建了一个新的上下文,但我看不到任何找到原始上下文的方法。

任何帮助都会很棒!

0 投票
1 回答
408 浏览

asp.net-core - 调用其他中间件的中间件

我有一些 ASP.NET Core 代码要提取到自定义中间件中。具体来说,应该实现如下逻辑:当请求某个路径时mapPath,将请求代理到另一个主机,由proxyUrl.

下面的代码Startup.cs可以解决问题:

好吧,它使用app.Map()分支然后代理中间件来代理请求。

(如何)是否可以将此逻辑提取到自定义和可重用的中间件?或者我不能在这里使用“真正的”中间件?我能做的当然是编写一个扩展方法,例如app.UseMapProxy()并将逻辑 1:1 放在那里,但我只是想知道我是否也可以使用“真正的”中间件类来做到这一点。

0 投票
1 回答
1675 浏览

asp.net - 分支 ASP.NET Core 管道身份验证

我的应用程序当前正在使用基本身份验证,但我想过渡到 OAuth,因此需要在短时间内使用两种类型的身份验证。有没有办法像这样分支我的 ASP.NET Core 管道:

所以上面,如果我检测到 HTTP 标头,我将使用基本身份验证,否则我使用 OAuth。

0 投票
2 回答
8226 浏览

c# - 设置响应 ContentType 的中间件

在我们基于 ASP.NET Core 的 Web 应用程序中,我们需要以下内容:某些请求的文件类型应获得自定义 ContentType 的响应。例如.map应该映射到application/json. 在“完整”的 ASP.NET 4.x 中并结合 IIS,可以利用 web.config<staticContent>/<mimeMap>来实现这一点,我想用自定义的 ASP.NET Core 中间件替换这种行为。

所以我尝试了以下方法(为简洁起见):

context.Response.ContentType不幸的是,在调用中间件链的其余部分后尝试设置会导致以下异常:

如何创建解决此要求的中间件?

0 投票
0 回答
540 浏览

asp.net-mvc - 如何告诉 ConfigureAuth 哪个是当前的 Web 应用程序主机名?

我想加载 CookieDomain 并根据数据库中的值设置外部提供程序,但是当 Startup 调用 ConfigureAuth(app); 时,似乎尚未设置 HttpContext.Current.Request.Url.Host; (值始终为 127.0.0.1)

如何让当前主机名在启动时可用?

因此,例如,如果我有 Web1.com、Web2.com ... 都绑定到同一个 Web 应用程序,我希望 ConfigureAuth 使用特定于该主机名的值(CookieDomain、CookieName、facebookAuthOptions.AppId、facebookAuthOptions。 AppSecret 等...)