问题标签 [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-core - 带有凭据的文件服务器中间件?
我们在企业环境中需要从 ASP.NET Core 应用程序的网络共享中提供静态文件内容。基本上,它在某个子路径下提供服务/content
。为此,我们有以下代码,可以正常工作:
现在在生产环境中,托管 Web 应用程序的系统用户无法访问文件共享。因此,我们必须使用某个技术域用户来访问文件,为此我们必须向文件服务器提供该系统用户的凭据(用户名/密码)。
不幸的是,我们没有找到向UseFileServer()
. 反正有可能吗?
cookies - 多租户 Web 应用程序中的 Owin 提供程序,其中每个域都有自己的提供程序
我正在尝试一个解决方案,其中一个 Web 应用程序服务于多个域,对于每个域我想配置自己的提供程序,使用外部提供程序的应用程序 ID 和秘密,我想要cookie 域和提供程序信息根据当前域名从数据库中读取,例如:
我面临两个主要问题:
- 我在 Owin 启动 ConfigureAuth() 中没有可用的 HttpContext,我不确定如何确定在启动早期使用哪个域名...
- 我知道每个 Web 应用程序只运行一次 Startup,例如,在第一次访问 web1.com 后,一旦 web1.com 已经设置了 ConfigureAuth(),它就不会再次为 web2.com 运行
我想知道我是否可以覆盖一些 Owin 方法并使其成为非静态的......或者也许找到一种方法以不同的方式实现它(但我仍然喜欢使用 Owin)
我从哪说起呢?
asp.net-web-api2 - 如何在 Web API 2 中配置 Swagger 以发布 OAuth2 身份验证请求?
我最近在 Visual Studio 2012 中启动了一个 Web API 2 项目,使用 OWIN 中间件通过 OAuth2 对用户进行身份验证。我合并了本教程中概述的基于令牌的身份验证(基于令牌的身份验证) 。身份验证部分效果很好。我添加了一些测试 API 方法,并且我想为我的 API 文档连接 Swagger。我也让这部分工作,除了来自 Swagger 的 API 调用在授权时失败。
经过研究,我找到了Erik Dahl关于如何将 Swagger 连接到 OWIN 中间件的帖子。根据帖子配置我的 Swagger 后,我现在可以在 Swagger UI 上看到每个 API 方法旁边的身份验证按钮。但是,当尝试进行身份验证时,Swagger 中的身份验证是使用 GET 请求完成的。Web API 上的身份验证虽然要求它是 POST 请求。是否可以配置 Swagger 使身份验证请求成为 POST?如果不是,我是否应该允许我的 API 接受 GET 请求以进行令牌身份验证?完成这项工作的最佳方法是什么?
注意:请求仍然符合我的身份验证逻辑,但是 client_id 和 client_secret 没有在 GET 请求中传递,仅在 POST 请求中传递。
这是我的 Swagger 配置:
这是我的 OAuth 配置:
owin - 每个租户的 Owin 管道
我正在研究在 SAAS 应用程序中实现不同身份验证方法的选项。saas 应用程序是为所有租户提供服务的单个实例。
为了允许不同的身份验证方法,我可以为每个租户创建不同的 owin 管道,以便在启动时遍历所有租户配置。请参阅此处的答案底部答案以获取解释: Change OWIN Auth Middleware Per Request (Multi-tenant, oauth API keys per tenant)
我意识到对管道的任何配置更改都会迫使我重建它,但我发现一个不错的 repo 似乎在做这个伎俩。https://github.com/damianh/DynamicKatanaPipeline
虽然为每个租户创建不同管道的解决方案是可能的,但我担心这不能很好地扩展。我想知道这是否是一个好的解决方案,以及是否有人知道我在此解决方案中没有看到的陷阱或有任何设置经验。
c# - 如何使用 OWIN 登录并使用 ASP.NET MVC 从 ADFS 返回的 SAML 票证?
我有一个网站,它有自己的登录屏幕,用户在其中输入他们的用户名和密码。点击登录按钮后,用户应该通过 ADFS 进行身份验证,我应该得到一个 SAML 令牌。这行得通。但在这一点上,我不确定我需要做什么才能登录用户。我不确定的原因是因为这个网站有点扭曲。正如我所说,用户通过我们网站的登录页面通过 ADFS 登录。但是,如果用户访问未经授权的页面,而不是将用户重定向到我们的登录页面,我们需要将用户重定向到我们的 ADFS 登录页面。我以这种方式开始了整个项目。用户通过 ADFS 的登录页面进行身份验证。这只需像这样设置我的 ConfigureAuth 方法(在 StartupAuth.cs 中)即可完成:
够简单!如果我尝试转到某个[Authorized]
页面,它会将我带到 ADFS 登录页面。在此之后,是时候研究另一种登录方法了(通过使用登录页面使用 ADFS 进行身份验证)。请记住,无论您尝试通过哪种方式进行身份验证,您仍然在使用同一个 ADFS 进行身份验证;一个您正在使用 ADFS 的登录页面,另一个您正在使用自定义登录页面。所以我用一个简单的小表单创建了自定义登录页面,用于登录:
这工作得很好。点击提交按钮后,它会尝试登录操作。登录操作如下所示:
它可以成功检索和创建 samlToken,甚至可以验证它并创建 claimPrincipal。我不确定在此之后要做什么才能登录。我尝试使用HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties { IsPersistent = true, RedirectUri = "Home/Homepage" },
claimsPrincipal.Identities.ElementAt(0));
,但如果我在那之后检查 Request.IsAuthenticated ,它仍然是错误的。我偷偷怀疑我的 StartupAuth.cs 文件中需要额外的配置,但我不确定,这就是我求助于你们的原因。感谢您的任何帮助!
c# - C#:修改 Owin 响应流导致 AccessViolationException
我正在尝试使用一些自定义的 Owin 中间件来修改(在这种情况下,完全替换)特定情况下的响应流。
每当我发出一个触发我的中间件来替换响应的调用时,一切都会正常工作。仅当我拨打我的中间件未对其进行更改时才会出现此问题。此外,我只能在未被替换的 API 调用返回手动创建的 HttpResponseMessage 对象时发生错误。
例如调用这个 API:
工作正常,但这个类:
导致错误发生。(在这两种情况下,http://localhost:<port>/test
都被调用。)
该错误会导致以下任一情况:
- 导致 iisexpress.exe(或 w3wp.exe,如果在实际 IIS 中运行)因访问冲突而崩溃。
抛出一个
/li>AccessViolationException
Visual Studio 捕获但无法执行任何操作的事件,因为它出现在外部代码中。当 Visual Studio 确实捕获异常时,我看到:
显然,如果我不启用我的中间件,我根本就没有问题。此外,我只能在手动创建和返回 HttpResponseMessage 对象时导致问题发生,如第二类所示。
这是我的中间件类。它目前设置为在有人请求端点时简单地替换整个响应流,/replace
无论管道中是否有其他任何东西对其进行了任何操作。
我已经做了很明显的事情——一整夜的 RAM 测试(一切都很好),并在另一个系统上尝试(它也发生在那里)。
此外,错误并不一致 - 它发生的时间大约有一半。换句话说,通常我可以通过一两个成功的请求,但最终还是会发生错误。
最后,如果我在我的中间件内存流复制之前在我的程序中设置一个断点,然后慢慢地单步执行代码,则永远不会发生错误。这向我表明我必须遇到某种竞争条件,并且它必须与我正在玩 MemoryStreams 的事实有关。
有任何想法吗?
c# - 使用 IdentityServer 向特定客户端验证特定用户
我IdentityServerV3
用于为少数客户验证用户。我在配置IdentityServer
特定user
必须能够登录到特定“客户端”的方式时遇到问题。
让我们看下面的场景:
我有 2 个客户 -> client1
, client2
. 我有 3 个用户 -> user1
, user2
, user3
.
user1
&user2
只能访问client1
。而user3
可以client2
单独访问。
当我尝试client1
使用user3
身份服务器登录时,身份验证成功。这是我不想要的。
用户是:
现在 OWIN 启动类是:
我不知道如何IdentityServer
知道哪个用户与哪个客户合作。是我的方案不受支持IdentityServer
还是我遗漏了任何东西。
更新
While registering the user i am redirecting him to a controller in Identity Server Host
.
启动.cs
我需要了解在注册时将 a 映射到的最佳方式,user
并client
确保用户只能登录该客户端而不是任何其他客户端,即使该用户username
的password
所有客户端都相同。
asp.net-mvc - 如何使用 OWIN 上下文注册 UserManager?
当我在 Visual Studio 2013 中创建 MVC 5 应用程序并选择个人帐户作为身份验证时,脚手架会自动配置 ASP Net Identity。ApplicationDbContext
它与和一起创建了几个类ApplicationUserManager
。它还使用 OWIN 上下文注册这些类,如下所示,以便每个请求使用单个实例。
基本上它注册static Create
每个类的方法。这个静态方法负责创建该类的实例。
问题
1>如果我不想使用静态创建方法,下面的方法是否正确?
2> 如何在ApplicationUserManager
不使用静态 Create 方法的情况下进行注册。(它必须设置 UserValidator、PasswordValidator、UserTokenProvider 等)我应该在的构造函数
中设置 Validators 和 UserTokenProvider吗?ApplicationUserManager
像下面
3>在上面的方法中,我如何注册ApplicationUserManager
OWIN 上下文以便它为每个请求创建单个实例?'ApplicationUserManager
还需要ApplicationUserStore
和ApplicationDbContext
..我如何将它们传递给ApplicationUserManager
的构造函数?
asp.net - 如何在 IdentityServer3 上读取 ASP.NET 会话?OWIN 管道订单被破坏
问题:我正在尝试在 IdentityServer3 Controllers 上使用 ASP.NET Session,但我无法让它工作。
我发现这个类似的问题解释了如何在 OWIN 中间件上启用会话,它运行良好:我在 IdentityServer 之外创建了一些控制器(即,在“/core”中映射的管道之外),它运行良好。我还将 Autofac 添加到我的控制器中,以确保 Autofac(在 IdentityServer 中广泛使用)不是问题,并且工作正常。
这是工作代码 - Startup.cs:
这工作正常。中间件 (SetSessionStateBehavior) 在每个请求上运行,并且会话在构造函数上可用。但是,一旦我添加app.UseIdentityServer()
到我的 Startup.cs,IdentityServer 就开始正常工作(并且所有申请都通过会话中间件)但是现在所有控制器的 Session 为空 - 不仅对于 IdentityServer 控制器,而且对于我的其他控制器(它们是在 IdentityServer 管道之外) - 他们停止工作。
如果我完全删除所有代码并坚持使用常规 IdentityServer 管道,我将找不到在管道中添加 RequireAspNetSession() 的正确位置。我尝试在许多不同的地方添加,但无法使其工作。
经过反复试验,我意识到会话中间件RequireAspNetSession()
被以下两个调用破坏了:app.UseEmbeddedFileServer()
和 app.ConfigureCookieAuthentication
. 当两个调用都被删除时,Session 对 IdentityServer 控制器可用(并且我的其他控制器也可以再次使用)。问题可能是因为其中一些 OWIN 中间件在特定阶段运行(使用UseStageMarker
和定义 a PipelineStage
),并且可能我打破了中间件的优先级顺序。UseEmbeddedFileServer 例如在舞台上运行PipelineStage.MapHandler
,以及 RequireAspNetSession。
我尝试app.RequireAspNetSession()
在这些中间件之前和之后添加,但它也不起作用。事实上,app.RequireAspNetSession()
在 Map() 方法中使用它时永远不会起作用,这是配置这些中间件的地方(内部UseIdentityServer()
):
_
最后,如果我不使用 Map 方法(并直接在根文件夹上设置 IdentityServer API),它可以正常工作(所有控制器都可以使用会话,即使我保留了 UseEmbeddedFileServer() 和 ConfigureCookieAuthentication() 中间件)。但这是不可接受的,因为我需要在映射文件夹上运行 API。
总之:如果我在 Map() 中使用 RequireAspNetSession(),它就不起作用(会话始终为空)。如果我在 Map() 之外使用 RequireAspNetSession(),但在 Map() 中保留 UseEmbeddedFileServer() 或 ConfigureCookieAuthentication(),它也不起作用。
如何使 RequireAspNetSession() 在 IdentityServer3 管道中工作?
此外, Map("/core") 如何影响(并破坏)托管在该管道之外的 DefaultController 的管道?
asp.net-core - ASP.NET Core 中间件还是 OWIN 中间件?
app.UseOwin()
据我了解,ASP.NET Core除了自己的本机中间件外,还支持 OWIN 中间件(通过)。
ASP.NET Core 中间件和 OWIN 中间件有什么区别?
在设计新的中间件时,我如何知道应该将其设计为 ASP.NET Core 中间件还是 OWIN 中间件?