概要描述
TDH 621 集群,对于服务的 web UI 添加了新的认证方式,直接去 curl 某些 API 会重定向到安全认证页面,从而返回302的错误。
详细说明
比如curl一个yarn的 API
curl -v http://172.22.22.161:8088/ws/v1/cluster/metrics
返回结果是 302 Found

问题原因
从结果中的 Location 部分来看,可知是跟安全相关的问题,准确来说是 TDH 621 开始 HDFS 跟 yarn 的 web 页面添加了认证参数,参考: http://172.16.1.168:8090/pages/viewpage.action?pageId=23483892
以下两个参数决定了是否要开启web安全认证
hadoop.security.authentication.web.oauth2.enabledhadoop.security.authentication.web.cas.enabled
默认情况下,hadoop.security.authentication.web.oauth2.enabled为true,说明会开启oauth2认证,这导致了curl的时候重定向问题

解决方案一:关闭web安全
参数hadoop.security.authentication.web.oauth2.enabled跟hadoop.security.authentication.web.cas.enabled都改成false,即可关闭web安全,curl命令也能够拿到正确的结果
curl -v http://172.22.22.161:8088/ws/v1/cluster/metrics
(改成false的影响是安全扫描时候会爆出漏洞)
因为hdfs跟yarn都是使用的这两个参数,所以改完之后配置hdfs,如果只希望关闭yarn的web安全,那么直接去重启yarn即可,不需要重启hdfs
解决方案二:在curl命令中添加认证方式
首先,界面登录guardian fedration,然后申请一个oauth token,并且让federation server自动刷新这个token

刷新时间可以自己定义:

结果中查看Access Token,复制出来

然后curl的时候带上 Authorization: Bearer token的值 这个http header
比如:
curl -H ‘Authorization: Bearer IMcj9UBwE4XS2B7fsKFw-FEDERATION’ -v http://172.22.22.161:8088/ws/v1/cluster/metrics
即可获得正确的结果:

### 扩展知识
HTTP认证
常用的HTTP认证方式有:Basic认证、Digest认证、OAuth2认证。
Basic认证
curl --basic -u user:password http://www.example.com/posts/1
Digest认证
curl --digest -u user:password http://www.example.com/posts/1
OAuth2认证
curl -u clientId:clientSecret -X POST -d "username=test&password=test&grant_type=password&scope=read" http://www.example.com/oauth/token
curl -H "Authorization: Bearer [bearer]" http://www.example.com/posts/1
### 详细说明