Ana*_*and 3 c# asp.net-web-api asp.net-core
我正在尝试在 ASP.Net Core 2.0 Web API 中使用基于 cookie 的身份验证,并尝试使用以下代码激活它。登录页面托管在与应用托管的域不同的域中。我已经向[Authorize]控制器添加了属性。
在启动时,我可以看到在调试器中调用的服务代码。
我的期望是,当我的 web 客户端使用 web api 服务时,中间件将检测到该标头没有 cookie 并将客户端重定向到登录页面。但是我可以自由调用控制器。
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options => options.AddPolicy("AllowAll",
builder => builder.SetIsOriginAllowed(s => true)
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()));
services.TryAddTransient<CorsAuthorizationFilter, CorsAuthorizationFilter>();
services.AddSwaggerGen(c =>
{
c.OperationFilter<FileOperationFilter>();
c.SwaggerDoc("v1", new Info
{
Title = "Collateral Management API",
Version = "v1"
});
});
services.AddMvcCore(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAll"));
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
.AddApiExplorer()
.AddJsonFormatters(s => s.NullValueHandling = NullValueHandling.Ignore);
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(auth =>
{
auth.Cookie.Domain = "xxx.com";
auth.Cookie.Name = "xxx";
auth.LoginPath = "/signin";
auth.AccessDeniedPath = "/signin";
});
services.AddAuthorization(auth =>
{
auth.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
});
//...
}
Run Code Online (Sandbox Code Playgroud)
然后 ...
app.UseAuthentication()
Run Code Online (Sandbox Code Playgroud)
尝试添加:
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
});
Run Code Online (Sandbox Code Playgroud)
后 services.AddMvc()
编辑
鉴于您添加 MVC 的方式,您可以尝试:
// requires: using Microsoft.AspNetCore.Authorization;
// using Microsoft.AspNetCore.Mvc.Authorization;
services.AddMvcCore(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
Run Code Online (Sandbox Code Playgroud)
AddMvcCore默认不添加授权服务。你还需要做AddMvcCore(...).AddAuthorization()