在我的ASP.NET核心web api中,我已经按照MS文档中的文章配置了Cors。web api应用程序正在使用windows身份验证(未启用匿名身份验证)。创建Cor的策略,并在< code>startup.cs中添加中间件,如下所示
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.WithOrigins("http://localhost:4200")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
);
});
services.AddMvc().AddJsonOptions(options => {
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//Enable CORS policy
app.UseCors("CorsPolicy");
app.UseMvc();
}
还应用了每个控制器级别的策略
[EnableCors("CorsPolicy"), Route("api/[controller]")]
public class LocationController : BaseController<Location>
{
//code
}
选项请求越来越未经授权。请求
我见过类似的问题,也尝试过几乎所有的解决方案,但选项请求仍然失败。
使用IIS CORS模块很好地解决了这个问题。以下网址仅供参考。
使用Windows身份验证虽然这绝不是CORS模块解决的唯一场景,但它非常重要,值得调用。以前,如果您尝试向使用Windows身份验证的应用程序发出跨域请求,您的飞行前请求将失败,因为浏览器没有随飞行前请求发送凭据。如果不在应用程序中启用匿名身份验证,则无法解决此问题。由于CORS模块在身份验证之前启动,因此可以在不影响应用程序安全模型的情况下处理飞行前请求。这里有一个例子,说明你的网站是什么。配置可能看起来像这样。
https://blogs.iis.net/iisteam/getting-started-with-the-iis-cors-module
示例代码:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- To customize the asp.net core module uncomment and edit the following section.
For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
<system.web>
<authentication mode="Windows"/>
</system.web>
<system.webServer>
<cors enabled="true" failUnlistedOrigins="true">
<add origin="http://localhost:60096" allowCredentials="true" >
<allowHeaders allowAllRequestedHeaders="true">
<add header="Header1" />
</allowHeaders>
</add>
</cors>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Project.Api.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
1) 在 launchSettings.json 文件(开发设置文件)中将“允许 Windows 和匿名身份验证”标志设置为 true。
匿名身份验证:需要允许预检选项请求。
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
"iis":
...
}
2)在配置服务方法中添加Cors策略。
public void ConfigureServices(IServiceCollection services)
{
...
services.AddCors(options =>
{
options.AddPolicy("MyCustomCorsPolicyName",
builder => builder.WithOrigins("http://YourDomainName/")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
);
});
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
3:将CORS中间件添加到您的Web应用程序管道以允许跨域请求。
public void Configure(IApplicationBuilder app)
{
....
app.UseCors("MyCustomCorsPolicyName");
app.UseMvc();
}
4)在控制器顶部添加Authorize属性以强制,客户端发送凭据
[Authorize]
public class MyAPIController : ControllerBase
{
...
}
5) 在 JQuery 或您正在使用的任何客户端中,将具有凭据属性标志设置为 true
$.ajax({
type: "POST",
datatype: "json",
url: "YourApiUrl",
xhrFields: {
withCredentials: true
}
这适用于我使用.net core 2.2,IIS Express和Windows身份验证的开发环境。
您可能想阅读以下线程:https://github.com/aspnet/CORS/issues/60.您可以混合匿名和NTLM,这样您的CORS预飞行就不会被拒绝(因为它们不包括Windows凭据)。IIS在NTLM身份验证到达中间件之前就处理了它,所以这可能是IIS的事情。您可能需要允许匿名CORs预飞行检查。
我正在开发ASP NET核心Web API,对认证方式的选择感到困惑。我曾经应用默认的Asp Net身份验证,但最近我知道了JWT。因此,我几乎像本文中一样实现了身份验证:https://stormpath.com/blog/token-authentication-asp-net-core。但是我不能理解这个JWT的好处。通过简单的Asp Net身份认证,我不关心令牌存储等,我只需要用signI
我有一个JavaJSF 2,Spring 3,HiberNate 4JavaEE应用程序,它使用第三方库来验证用户。我将所需的CA证书导入到我的JVM中,将第三个库添加到项目中,并在web.xml.中配置该库从智能卡读取用户详细信息。整个设置正在工作,第三方库将用户带到主页。 以下是我的要求,以确保应用程序。 再次检查该用户是否存在于特定于应用程序的数据库中 我看了这个链接,似乎“身份验证处理过滤
我正在尝试使用基本身份验证获取url。我设置用户/密码如下所示。同样的凭证在邮递员中工作。 我认为凭据设置不正确。这里怎么了?错误:
我仍然对所有这些身份的东西感到困惑。 首先,我仍然不清楚角色、政策/声明之间的区别。据我所知,角色是旧的做事方式,是为了向后兼容而保留的,那么这是否意味着AspNetRoleClaims是向后兼容的一部分? 我认为我理解索赔和政策时,当将它们单独考虑时,就像政策基本上是一组必须通过的规则,并赋予更改规则的能力,而不必遍历所有代码和更改角色。 这是一个声明,基本上是一个可信的来源,为该用户提供担保(
经过身份验证的请求可用于获取授权代码令牌,以访问系统中的所有者资源。 对授权端点发出的请求会导致用户身份验证,并在向授权端点发送请求时提供明确的凭据。 经过身份验证的请求包含以下参数 - response_type - 这是一个必需参数,用于将值设置为'code',用于请求授权代码。 如果授权请求中没有'response_ type'参数,则授权服务器返回错误响应。 由于无效或不匹配的重定向URI