忽略所有 HTTP.OPTIONS 调用的身份验证是不是安全?

Posted

技术标签:

【中文标题】忽略所有 HTTP.OPTIONS 调用的身份验证是不是安全?【英文标题】:Is it safe to ignore Authentication for all HTTP.OPTIONS calls?忽略所有 HTTP.OPTIONS 调用的身份验证是否安全? 【发布时间】:2016-06-09 04:22:31 【问题描述】:

我的服务有一个跨源请求。该服务需要一个“身份验证”标头作为令牌。

web客户端使用angularjs拦截器传递Authorization token,却得到

OPTIONS http://<domain>:<port>/xxxx 401 (Unauthorized)XMLHttpRequest cannot load http://<domain>:<port>/xxxx. Response for preflight has invalid HTTP status code 401

因此,无法将Access-Control-Allow-Headers : Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With 作为响应。所以下面的GET 调用中的Authorization 标头被忽略了!

但是当我禁用OPTIONS 方法的身份验证时——我添加了一个antMatchers(HttpMethod.OPTIONS,"/**").permitAll()—— Web 应用程序能够按预期发送 Authorization 标头。

在我的服务中对所有 HTTP.OPTIONS 方法进行未经身份验证的调用是否安全?

相关问题:Disable Spring Security for OPTIONS Http Method

【问题讨论】:

【参考方案1】:

OPTIONS 调用是浏览器确定是否允许跨源调用 API 的一种方式。浏览器不会在此调用中发送 Authorization 标头。

您只需返回一个状态码,指示是否允许跨源调用(200 OK 或 403 Forbidden)。如果允许,浏览器将使用 Authorization 标头发出实际请求,然后您检查凭据。

【讨论】:

以上是关于忽略所有 HTTP.OPTIONS 调用的身份验证是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

Spring security 3 在使用 OpenID 进行身份验证时忽略禁用/锁定标志

如何避免在 express.js auth 中间件中捕获 HTTP OPTIONS 请求

NuxtJS 身份验证代理

jdk1.6 支持 tls1.2协议 并忽略身份验证

无法将令牌附加到 API 调用(基本身份验证、AFNetworking)

NumberValidators大陆身份证验证