1、首先梳理反向oauth2-票据注入获取code的逻辑,逻辑为:客户端触发点击应用的行为,然后流量会到代理网关设备上,代理网关会识别这个应用是配置了票据注入的应用,会主动带一些参数向控制中心请求获取code
2、代理网关带的参数是responseType=codeJson&appid=xxxxxx,url地址是控制中心的接入地址(不能是多地址配置里面的),大概url为https://sdpc.xx.com/passport/v1/public/auth2ssoLogin?responseType=codeJson&appid=xxxxxx

3、控制中心颁发code是通过认证进程(sdp-passport)去颁发的的,所以通过认证调试日志可以看到是否接受到了代理网关发送过来的请求,通过在日志搜索关键字“auth2ssoLogin”,如果没搜到就说明请求都没到设备上,客户提供的sdp-passport-web.log日志中并未收到这个关键字,说明请求都没到达控制中心上
4、进一步查看代理网关的日志发起的请求是否有报错,通过/hislog/log/nginx/sdp-proxy/error.log日志发现有如下报错:“proxy get oauth2 code failed ,reason:occur connection error”,说明代理网关到控制中心的地址不通导致,此处的地址是说控制中心的公网地址,代理网关上curl -kv https://sdpc.xx.com不通,让客户调通双向nat之后,通信正常

5、进一步测试,在控制中心上打认证调试日志,搜索关键字“auth2ssoLogin”和关键字“X-OAUTH2-PROXY-SID”,说明控制中心颁发code给代理网关成功
此处还有扩展问,控制中心如何把code传给代理网关,代理网关又如何传给业务服务器呢?
答:1、控制中心通过响应把code直接返回给代理网关,可以通过抓取控制中心的数据包看到,抓取控制中心的50004端口即可,tcpdump -i any port 50004 -nnv -s0 -w sdp.pcap,如下图一就是抓取的数据包

2、代理网关通过把code放在头部中,并且改名为X-SDP-SSO-Code,让业务服务器从头部中 取X-SDP-SSO-Code参数即可达成业务服务器取到code的目的
