asp.net-web-api – ASP.NET WEB API 2 OWIN身份验证unfported g
您好我正在尝试在我的ASP.NET Web API 2项目中设置OAuth bearrer令牌身份验证.
我有两个项目,一个是WEB API项目,另一个是SPA项目. 这是我到目前为止所做的: 我创建了OWIN Startup类: [assembly: OwinStartup(typeof(CodeArt.WebApi.App_Start.Startup))] namespace CodeArt.WebApi.App_Start { public class Startup { static Startup() { PublicClientId = "self"; UserManagerFactory = () => new UserManager<UserModel>(new UserStore<UserModel>()); OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString("/Token"),Provider = new OAuthAuthorizatonServer(PublicClientId,UserManagerFactory),AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),AllowInsecureHttp = true }; } public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; } public static Func<UserManager<UserModel>> UserManagerFactory { get; set; } public static string PublicClientId { get; private set; } public void Configuration(IAppBuilder app) { ConfigureAuth(app); } public void ConfigureAuth(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOptions()); app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalBearer); app.USEOAuthBearerTokens(OAuthOptions); } } 我已将Web API配置为仅使用承载令牌身份验证: private static void ConfigureBearerTokenAuthentication(HttpConfiguration config) { config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(Startup.OAuthOptions.AuthenticationType)); } 我已经配置了WEB API来支持CORS: private static void ConfigureCrossOriginResourseSharing(HttpConfiguration config) { var cors = new EnableCorsAttribute("*","*","*"); config.EnableCors(cors); } 我创建了OAuthAuthorizationServerProvider类.从这个类我只设法让我的代码调用这个方法: public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) { if(context.ClientId == null) { context.Validated(); } return Task.FromResult<object>(null); } 内部的if条件总是被执行. 在我的水疗项目中,我有以下内容: 这是我的viewModel: var vm = { grant_type: "password",userName: ko.observable(),password: ko.observable() }; 单击登录按钮后,我调用此函数: var http = { post:function(url,data) { return $.ajax({ url: url,data: data,type: 'POST',contentType: 'application/json',dataType: 'jsonp' }); } } function loginClick() { var model = ko.mapping.toJS(vm.loginModel); var rez = $.param(model); http.post("http://localhost:3439/Token",rez) .done(function (data) { console.log(data); }) .fail(function(eror,stuff,otherstuff) { console.log(eror); console.log(stuff); console.log(otherstuff); }); } 我设置帖子的第一次尝试调用dataType为json,我得到了这个错误:
3个点代表http:// localhost. 第二次arround我将它的数据类型设置为jsonp,我得到了一个错误,指出不支持的“unsupported_grant_type”. 这两个调用都使它成为我上面提到的ValidateClientAuthentication,但它们都作为失败的请求发回. 现在我猜测问题与我如何发送数据而不是grand_type更相关,因为Visual Studion中的SPA模板设置为grant_type的授权类型:“密码”就像我做的那样. 另外我已经读过我必须序列化数据而不是在json中发送它才能使这个工作在这里是得到的确切的json序列化数据: Durandal Framework将模型ID属性设置为我的SPA模板中的所有对象. 任何人都能告诉我我做错了什么我过去两天一直试图解决这个问题吗? 解决方法
将以下代码行添加到GrantResourceOwnerCredentials,它将向响应添加标头.
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin",new[] { "*" }); 有关更多信息,请参阅: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – RegisterForEventValidation只能在渲
- asp.net – 什么可能导致一个服务器上的此错误,但
- asp.net-mvc-3 – TextBoxFor vs EditorFor,和ht
- asp.net – 存储库模式最佳实践
- asp.net – 未知的服务器标签’ajaxToolkit:Cal
- asp.net – MSDeploy连接字符串的自动加密,字典中
- asp.net-mvc – 双引号之间的Razor代码
- asp.net-mvc – MVC – 索引视图溢出
- asp.net-mvc-5 – 如何使用不同参数类型的相同路
- 实体框架 – 我们如何使用Breeze的本地时区生存