忽略所有 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 请求