OpenID配置响应中缺少密钥斗篷端口



这一个看起来很奇怪。当我通过Postman或在浏览器中获取OpenID配置时,我会得到一个有效的配置响应。

例如,通过Postman或在浏览器中获取

http://127.0.0.1:8080/auth/realms/myrealm/.well-known/openid-configuration

正确返回包括端口8080的端点:

{
snip
"jwks_uri": "http://127.0.0.1:8080/auth/realms/myrealm/protocol/openid-connect/certs"
snip
}

然而,在我的C++应用程序中,从完全相同的主机、目标、端口、方案(http(获取返回的confi端点都没有端口(例如,缺少8080(

{
snip
"jwks_uri":"http://127.0.0.1/auth/realms/myrealm/protocol/openid-connect/certs"
snip
}

我在我的C++客户端代码中没有看到任何问题,我不确定是什么造成了差异。为了完整起见,这是我在发送请求时在实际值旁边使用的C++代码,尽管这实际上不应该是所使用的编程语言的问题:

req_.version(version); // HTTP 1.1
req_.method(method); // GET
req_.target(target); // /auth/realms/myrealm/.well-known/openid-configuration
req_.set(http::field::host, host); // 127.0.0.1
static const std::string agent = app.myAgent(); 
req_.set(http::field::user_agent, agent);
req_.set(http::field::content_type, contentType); // application/json

我有两个问题:

1( 是什么原因导致Key斗篷没有将端口添加到端点?如何解决?

2( 这两个电话有什么区别?这应该是一个普通的GET请求。

想明白了。根据HTTP规范,如果端口不是默认名称,则必须将其包含在主机名中:

https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23

这解决了问题。不过,我的意见是,它也应该固定在钥匙斗篷。我希望静态URL,而不是根据您的请求而更改的内容。例如,您可以在请求期间将host设置为localhost,它将在配置中返回"localhost",将其设置为127.0.0.1,它将返回该值。当在本地查询实际IP,但服务器有公共IP时,它会返回什么?我没有试过,但这似乎很奇怪。

最新更新