asp.net-web-api – ASP.NET WEB API 2 OWIN身份验证unfported grant_
|
您好我正在尝试在我的ASP.NET Web API 2项目中设置OAuth bearrer令牌身份验证.
这是我到目前为止所做的: 我创建了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 MVC真正注销表单身份验证
- 在ASP.NET MVC2创建方法中使用FormCollection的正确方法?
- asp.net – 将通用模型的子类传递给剃刀视图
- asp.net – 根据参数应用不同的XSLT模板
- Modular Web Application with ASP.NET Core
- 如何为Asp.Net中的所有子文件夹注册HttpHandler?
- asp.net-mvc-4 – 获取上下文是不可构建的.添加一个默认的构
- ASP.NET开发常用简单实用的方法
- asp.net-web-api – 没有实体框架的WebAPI ODATA
- ASP.Net:将客户端onClick添加到GridView中的HyperlinkFiel
