Tag: owin

改变facebook redirect_uri web api

我想知道是否有人可以帮助我或指出我正确的方向。 我在我的web api 2项目中设置了facebook社交登录,它运行正常。 但是,当我将其部署到生产环境时,我发现redirect_uri显示的是HTTP而不是HTTPS,这会导致服务崩溃。 我想知道的是首先是如何构造redirect_uri以及是否有任何更新方法。 发生这种情况的全部原因是因为我们的负载均衡器。 该站点在HTTP协议下运行,但负载均衡器接受HTTPS流量并将其重定向到HTTP。 不幸的是,我无法更新Loadbalancer,因此需要找到一种解决方法。 我试图拦截ApplyRedirect方法中的IFacebookAuthenticationProvider ,这成功地允许我将redirect_uri从HTTP更改为HTTPS。 然而,当我这样做时,一旦我登录Facebook并且不知道为什么会发生这种情况,我会得到access_denied的错误。 有人可以帮我实现吗? 我可以明确地将facebook设置的redirect_uri和cookie标记为HTTPS吗? 这是我的Facebook提供者类 public class FacebookAuthProvider : IFacebookAuthenticationProvider { public void ApplyRedirect(FacebookApplyRedirectContext context) { string redirect_uri = context.RedirectUri; redirect_uri = redirect_uri.Replace(“redirect_uri=http”, “redirect_uri=https”); context.Response.Redirect(redirect_uri); } public Task Authenticated(FacebookAuthenticatedContext context) { context.Identity.AddClaim(new Claim(“ExternalAccessToken”, context.AccessToken)); return Task.FromResult(null); } public Task ReturnEndpoint(FacebookReturnEndpointContext context) { return Task.FromResult(null); } […]

应该如何使用IAppBuilder.CreatePerOwinContext ?

我对如何使用OWIN CreatePerOwinContext方法感到困惑。 据我所知,这是一个糟糕的勒芒机制。 然而,我没有看到如何使用它。 我们可以在Startup序列中注册一个类型/实现,如: app.CreatePerOwinContext(() => { return new UserService() as IUserService; }); 然后我们如何在以后解决这个问题。 文档说它可以通过Get方法检索。 但Get需要一个字符串参数,这是Enviornment IDictionary中该条目的关键? 在这种情况下,我怎么知道钥匙? IUserService userService = context.Get(???);

如何使用Owin中间件拦截404

背景 首先让我解释一下背景。 我正在研究一个项目,该项目试图将使用通过IIS上托管的OWIN配置的Web API的后端服务器结合起来,但未来可能还有其他OWIN支持的主机 – 使用AngularJS的前端。 AngularJS前端完全是静态内容。 我完全避免服务器端技术,如MVC / Razor,WebForms,Bundles,任何与前端及其使用的资产有关的技术,而是推迟使用Node.js,Grunt / Gulp等最新最好的技术。处理CSS编译,捆绑,缩小等等。由于我不会进入这里的原因,我将前端和服务器项目保存在同一项目中的不同位置(而不是直接将它们全部放在Host项目中(参见raw下图)。 MyProject.sln server MyProject.Host MyProject.Host.csproj Startup.cs (etc.) frontend MyProjectApp app.js index.html MyProjectApp.njproj (etc.) 所以就前端而言,我需要做的就是让我的主机服务我的静态内容。 在Express.js中,这是微不足道的。 使用OWIN,我能够使用Microsoft.Owin.StaticFiles中间件轻松地完成此操作,并且它运行良好(非常灵活)。 这是我的OwinStartup配置: string dir = AppDomain.CurrentDomain.RelativeSearchPath; // get executing path string contentPath = Path.GetFullPath(Path.Combine(dir, @”../../../frontend/MyProjectApp”)); // resolve nearby frontend project directory app.UseFileServer(new FileServerOptions { EnableDefaultFiles = true, FileSystem = […]

WebApi + Simple Injector + OWIN

我试图在WebAPI项目中使用SimpleInjector和OWIN。 但是, ConfigureAuth的以下行失败 app.CreatePerOwinContext(container.GetInstance); 例外情况是ApplicationUserManager注册为“Web API请求”生活方式,但实例是在Web API请求的上下文之外请求的。 我正在使用container.RegisterWebApiRequest(); 在容器初始化。 (如果我使用Register而不是RegisterWebApiRequest则不会有任何例外,但根据简单的注入器文档,这不是首选方法) 据我所知,需要使用CreatePerOwinContext注册ApplicationUserManager ,以便OWIN正常工作。 我想知道如果Simple Injector在启动期间无法解析实例,我们如何使用Simple Injector执行此操作。 我已经在这个SO答案中尝试过该方法,但它失败了同样的消息。 知道怎么解决这个问题?

WebApi OAuth UseOAuthBearerAuthentication给出“Sequence包含多个元素”错误

我按以下方式配置了我的WebApi OAuth 2.0: app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions { Provider = new OAuthBearerAuthenticationProvider(), }); app.UseOAuthBearerTokens(OAuthOptions); 但它在每个请求时给出了以下错误: Message : An error has occurred. ExceptionMessage : Sequence contains more than one element ExceptionType : System.InvalidOperationException StackTrace : at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source) at Microsoft.Owin.Security.AuthenticationManager.d__8.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 […]

中间件应该总是调用下一个?

我一直在努力了解ASP.NET 5管道中间件如何真正起作用。 正如我所知,中间件只是一个Func ,它是一个指向接收对下一个请求委托的引用的方法的指针,并返回一个包装下一个请求委托的新方法。 当然,我们可以使用类来表示中间件,例如: public class MyMiddleware { private readonly _next; public MyMiddleware(RequestDelegate next) { if (next == null) { throw new ArgumentNullException(“next”); } _next = next; } public Task Invoke(HttpContext context) { // New request delegate code here which can wrap the next one on the pipeline } } 由于RequestDelegate是一个委托,可以保存对接收一个HttpContext并返回Task的方法的Invoke因此Invoke方法是要返回的请求委托,并且可以访问管道上的下一个委托委托。 然后,在编写中间件时,我们可以访问管道的下一个组件,但我有一个疑问。 一开始我认为理想总是以下列方式工作: 检查中间件是否可以处理请求 […]

要求对OWIN应用程序的所有请求进行身份validation

我正在使用自托管的OWIN应用程序,并试图找出如何要求所有请求(或任意请求)的身份validation/授权。 管道中的一些单独组件有自己的授权工具(例如WebAPI,SignalR,Nancy),但是当我想限制所有内容时,这似乎有点多余。 此外,某些中间件没有授权支持(例如Microsoft.Owin.StaticFiles)。 如果我的OWIN Startup看起来像这样: public class Startup { public void Configuration(IAppBuilder app) { app.RequireSsl(); app.UseCookieAuthentication(new CookieAuthenticationOptions()); //… app.UseGoogleAuthentication(); // ** Need to add something that restricts access ** app.UseDirectoryBrowser(); } } 在提供目录浏览器之前,如何要求用户进行身份validation(必要时重定向)? (目录浏览器可以任意为其他OWIN组件。)

替代在System.Web中为Owin使用HttpContext

ASP.NET身份validation现在基于OWIN中间件,可以在任何基于OWIN的主机上使用。 ASP.NET Identity 对System.Web没有任何依赖 。 我有一个AuthorizeAttributefilter,我需要获取当前用户并添加一些属性以供操作控制器稍后检索。 问题是我必须使用属于System.Web的HttpContext。 对于Owin有没有HttpContext的替代方案? public class WebApiAuthorizeAttribute : AuthorizeAttribute { public override async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken) { base.OnAuthorization(actionContext); Guid userId = new Guid(HttpContext.Current.User.Identity.GetUserId()); ApplicationUserManager manager = new ApplicationUserManager(new ApplicationUserStore(new ApplicationDbContext())) { PasswordHasher = new CustomPasswordHasher() }; ApplicationUser user = await manager.FindByIdAsync(userId); actionContext.Request.Properties.Add(“userId”, user.LegacyUserId); } } 注意:我发现这个问题 ,似乎是重复的,但要求为NancyFx项目工作的解决方案,这对我来说无效。

Owin Bearer Token不适用于WebApi

我已经浏览了大量文档,我的谷歌搜索显示我访问了第一页上的所有链接 问题令牌生成工作正常。 我使用自定义提供程序对其进行了配置: public void ConfigureOAuth(IAppBuilder app) { var usermanager = NinjectContainer.Resolve(); app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions { AllowInsecureHttp = true, TokenEndpointPath = new PathString(“/token”), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), Provider = new AppOAuthProvider(usermanager) }); app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); } 但是,当我调用受保护的URL并传递持有者令牌时,我总是得到: 如何诊断或解决问题。 如果可能,我如何自己进行令牌validation 更新这是我的AppOAuthProvider。 当我尝试使用令牌时,会调用这两种方法,但在我尝试访问受保护资源时则不会 public class AppOAuthProvider : OAuthAuthorizationServerProvider { private UserManager _user; public AppOAuthProvider(UserManager user) { _user = user; } […]

Owin.AppBuilderExtensions中的内存泄漏

我在Web应用程序中使用OWIN + Microsoft.AspNet.Identity.Owin(v.2.0.0.0)。 我按照广泛推荐的方式为每个Web请求注册UserManager / DbContext: app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext(ApplicationUserManager.Create); 但都没有处理过。 我瞥了一眼reflection器,看起来像扩展方法中的一个bug: public static IAppBuilder CreatePerOwinContext(this IAppBuilder app, Func<IdentityFactoryOptions, IOwinContext, T> createCallback) where T: class, IDisposable { if (app == null) { throw new ArgumentNullException(“app”); } if (createCallback == null) { throw new ArgumentNullException(“createCallback”); } object[] args = new object[1]; IdentityFactoryOptions options = new IdentityFactoryOptions { DataProtectionProvider […]