我创build了一个WebApi和一个Cordova应用程序。 我正在使用http请求在Cordova应用程序和WebApi之间进行通信。 在WebApi中,我实现了OAuth承载令牌生成。 public void ConfigureOAuth(IAppBuilder app) { var oAuthServerOptions = new OAuthAuthorizationServerOptions { AllowInsecureHttp = true, TokenEndpointPath = new PathString("/token"), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), Provider = new SimpleAuthorizationServerProvider(new UserService(new Repository<User>(new RabbitApiObjectContext()), new EncryptionService())) }; // Token Generation app.UseOAuthAuthorizationServer(oAuthServerOptions); app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); } 这在SimpleAuthorizationServerProvider实现中 public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); // […]
当我尝试开始时: WebApp.Start<SrvcHst>(new StartOptions { Port = 9956, ServerFactory = "Microsoft.Owin.Host.HttpListener" }); 我得到以下exception。 什么可能是根本原因? System.MissingMemberException was caught HResult=-2146233070 Message=The server factory could not be located for the given input: Microsoft.Owin.Host.HttpListener Source=Microsoft.Owin.Hosting StackTrace: at Microsoft.Owin.Hosting.Engine.HostingEngine.ResolveServerFactory(StartContext context) at Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext context) at Microsoft.Owin.Hosting.Starter.DirectHostingStarter.Start(StartOptions options) at Microsoft.Owin.Hosting.Starter.HostingStarter.Start(StartOptions options) at Microsoft.Owin.Hosting.WebApp.StartImplementation(IServiceProvider services, StartOptions options) at Microsoft.Owin.Hosting.WebApp.Start(StartOptions options) at Microsoft.Owin.Hosting.WebApp.Start[TStartup](StartOptions options)
我想要下面的架构(我已经为此示例组成了产品名称): 在一台服务器上运行的Web API 2应用程序 http://api.prettypictures.com 在另一台服务器上运行的MVC 5客户端应用程序 http://www.webpics.com 我想要www.webpics.com客户端应用程序使用Pretty Pictures API来: 使用用户名和密码注册新帐户 使用Facebook / Google / Twitter / Microsoft注册新帐户 login 检索图片 除了在Facebook,Google等地注册外部账户外,所有上述作品 我无法制定正确的stream程来从API的单独客户端用户创build外部帐户。 我已经研究了authenticationstream程中可用的大部分文档,如下所示: 我已经在OWIN中的新身份模型上读了几乎所有的东西。 我已经在Visual Studio 2013中研究了SPA模板。它演示了如何完成我所需要的大部分工作,但只有当客户端和API位于同一个主机上时才需要。 如果我想要多个客户端访问我的API,并能够让用户通过谷歌等注册这是行不通的,据我所知,OWIN身份validationstream程中断。 这是目前的stream程: 用户浏览www.webpics.com/Login www.webpics.com调用api.prettypictures.com/Account/ExternalLogins (带有returnUrl设置回到在www.webpics.comcallback),并显示链接到用户 用户点击“Google” 浏览器使用提供商的名称redirect到api.prettypictures.com/Account/ExternalLogin 。 API的ExternalLogin操作实例化对google.com的挑战 浏览器被redirect到google.com 用户input他们的用户名和密码(如果他们还没有login到google.com ) google.com现在提出了安全许可: “api.prettypictures.com”想访问您的电子邮件地址,姓名,妻子,孩子等。这是行吗? 用户点击“ YEP ”, 然后用Google设置的cookie将其带回api.prettypictures.com/Account/ExternalLogin 。 这是我卡住的地方。 接下来应该发生的事情是,应该通知客户端应用程序已经成功通过google.com的身份validation,并被赋予一个单一的访问代码,以便稍后交换访问令牌。 如有必要,客户端应用程序应该有机会提示用户input用户名与其google.comlogin关联。 我不知道如何促进这一点。 事实上,在Google的callback之后,浏览器终于坐在了api.prettypictures.com/Account/ExternalLogin端点上。 APIloginGoogle,但客户不知道如何处理。 我应该把这个cookie传回www.webpics.com吗? 在SPA应用程序中,通过AJAX完成, […]