在单点登录重定向过程中输入凭据后,您的x射线登录UI在浏览器中返回错误的令牌交换消息怎么办
相关版本:此信息属于Artifactory版本6.x
当您访问Xray URL时,您将被重定向到Artifactory登录页面进行单点登录(SSO)。成功登录后,单点登录(SSO)重定向应该将您带回到Xray主页。相反,您可能会在浏览器中看到一个令牌交换错误。
当出现此问题时,您将在Artifactory request.log中注意到以下错误。对API端点/ API /system/gateway/openid/token的请求,会在登录失败后立即在日志中注册一个HTTP 401错误:
20181219200724 | 14 | |请求10.103.146.36 | non_authenticated_user |职位| / api /系统/网关/ openid /令牌HTTP / 1.1 | 401 | 1907 |
通常,这应该会导致成功登录的HTTP 200消息。
在启用调试的xray_server.log中,您将看到一个HTTP 401未经授权的错误,消息为“Failed to get sso info response”。
xray_server.log中的相关日志信息如下:
[2018/12/19 21:21:45 UTC] [error] (www.si-fil.com/xray/access/access_sso.(*AccessSsoClient).ExchangeToken:73) Failed to get sso info response, err: statusCode: 401, models.]AccessError{代码:"",消息:"未经授权",详细信息:""}
[2018/12/19 21:21:45 UTC] [error] (www.si-fil.com/xray/handlers/auth.AuthHandler.SsoExchange:343) statusCode: 401, models。AccessError{代码:"",消息:"未经授权",详细信息:""}
当反向代理服务器或Artifactory实例前面的负载均衡器中缺少X-Artifactory-Override-Base-Url和proxy_pass_header服务器头时,会发生此问题。一般来说,当x射线或任何其他客户端通信你是你的Artifactory服务器,Artifactory返回几个HTTP响应头与一个值连同响应,这包括Artifactory的基本URL和Artifactory服务器版本在服务器头。包括Artifactory Base URL在内的HTTP响应头服务器可能会被Artifactory前面的反向代理服务器或负载均衡器覆盖。
当这种情况发生时,Xray希望在与Artifactory通信期间在您的Artifactory基础URL和HTTP头服务器中看到某个值的客户端。但是如果您的反向代理或负载均衡器覆盖了来自Artifactory的响应,其中包括Artifactory Base URL和Server报头,那么它将导致失败,因为Xray服务没有在HTTP报头中获得预期的值。
要解决此问题,请将x -Artifactory- overrides - base - URL头配置为Artifactory实例前面的反向代理服务器配置中的Artifactory URL所使用的值。与此同时,设置报头proxy_pass_header的值为:Server。注意:如果没有设置SSL,使用的Artifactory URL协议应该是http,如果启用了SSL,则应该是https。
在下面的例子中,我们假设SSL已经在反向代理服务器上启用,并且Artifactory正在通过https访问(在更新反向代理配置时,您将更改${Artifactory_domain}变量为Artifactory实例的完全限定域名(FQDN)):
Nginx的:
proxy_set_header x - artifactory - overrides - base - url https://${Artifactory_domain}/artifactory;
proxy_pass_header服务器;
对于负载均衡器:
如果您只在Artifactory前使用负载均衡器,则配置您的自定义URL基或X-Artifactory-Override-Base-Url,其值与负载均衡器配置中的Artifactory URL所使用的值相同。与此同时,应该允许HTTP报头Server通过负载均衡器,并且它的值不应该被负载均衡器覆盖。