我需要从web api服务器实现OWIN授权。下面是我的初创班。
[assembly: OwinStartup(typeof(SpaServerSide.MyStartUp))]
namespace SpaServerSide
{
public class MyStartUp
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
app.Map("/signalr", map =>
{
map.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
var hubConfig = new Microsoft.AspNet.SignalR.HubConfiguration { };
map.RunSignalR(hubConfig);
});
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/#")
});
OAuthAuthorizationServerOptions OAuthOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/Token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(5),
Provider = new SpaServerSide.Shared.OAuthTokenServer()
};
app.UseOAuthAuthorizationServer(OAuthOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
}
}
然后,我将OAuthAuthorizationServerProvider实现如下:
public class OAuthTokenServer : OAuthAuthorizationServerProvider
{
public ASPIdentityUserManager cusUserManager;
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Credentials", new[] { "true" });
var user = await cusUserManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "Username and password do not match.");
return;
}
var identity = await cusUserManager.CreateIdentityAsync(user, context.Options.AuthenticationType);
context.Validated(identity);
}
}
之后,我在http://localhost:5587和http://localhost上的客户网站上托管了网络服务器。当我尝试使用Angular JS请求令牌时,浏览器向我提出了一个CORS错误。信息如下:
阻止跨源请求:同源策略禁止读取 http://localhost:5587/Token处的远程资源。 (原因:CORS 标题' Access-Control-Allow-Origin'丢失)。
请告诉我任何我错过的事情。
答案 0 :(得分:1)
移动线:
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
在Configuration()
方法的开头。
您必须在oauth中间件之前配置CORS中间件。在信号器中间件之前,如果你需要它。
答案 1 :(得分:0)
试试这个
启用浏览器设置以允许跨源访问
IE:http://www.webdavsystem.com/ajax/programming/cross_origin_requests
Firefox:How to enable CORS on Firefox?
答案 2 :(得分:0)
我认为您需要在服务器端启用CORS。你可以参考这个http://enable-cors.org/server.html。点击基于您服务器的链接。
希望对你有所帮助。 :)