C# Identity Server 4 OpenID连接发现是否应公开?

C# Identity Server 4 OpenID连接发现是否应公开?,c#,identityserver4,openid-connect,C#,Identityserver4,Openid Connect,Identity Server 4通过公开OpenID连接发现。众所周知的/OpenID配置url。现在我不太清楚为什么会有这个,或者谁应该访问它。我理解这一点的方式是,这个页面所做的就是给出关于端点的信息 有权访问我的IS4服务器的应用程序将预先配置端点,因为它们都是内部的,因此我认为没有理由公开此页面,我认为不公开此信息更安全 因此,我的问题是我是否应该限制访问此页面,如果是,如何限制访问?如果没有,原因是什么?保留该端点的主要好处是自动配置客户端。从: 服务器库能够在启动期间更改任何端点路

Identity Server 4通过
公开OpenID连接发现。众所周知的/OpenID配置
url。现在我不太清楚为什么会有这个,或者谁应该访问它。我理解这一点的方式是,这个页面所做的就是给出关于端点的信息

有权访问我的IS4服务器的应用程序将预先配置端点,因为它们都是内部的,因此我认为没有理由公开此页面,我认为不公开此信息更安全


因此,我的问题是我是否应该限制访问此页面,如果是,如何限制访问?如果没有,原因是什么?

保留该端点的主要好处是自动配置客户端。从:

服务器库能够在启动期间更改任何端点路径,如。通过使用自动配置,您的应用程序可以自动接收该更改,而无需手动更新所有客户端应用程序

如果您想使用此功能,则仅为方便起见提供此功能


如果此应用程序仅暴露于您的内部网络(或仅暴露于您自己的计算机或Docker网络),则保留此应用程序绝对没有坏处

如果此应用程序暴露于公共网络,则需要开始询问自己是否希望攻击者知道配置端点提供的信息

攻击者只知道应用程序是身份验证服务器、到各个端点的路径、支持哪种类型的OAuth2流,以及其他一些小细节。如果您有面向公众的文档,那么这将是该文档的机器可读版本

与其专注于阻止对配置端点的访问,不如确保您的Auth服务器端点已通过身份验证。在分发令牌之前,您应该检查客户端Id和客户端机密是否存在并且正确

From(这是关于内省端点的,但实际上该原则适用于所有端点):

如果内省端点处于打开状态且未被阻止,则攻击者可以通过此方法轮询端点以查找有效令牌。为了防止这种情况,服务器必须要求使用端点对客户端进行身份验证,或者仅通过防火墙等其他方式使端点可供内部服务器使用


保留该端点的主要好处是自动配置客户端。从:

服务器库能够在启动期间更改任何端点路径,如。通过使用自动配置,您的应用程序可以自动接收该更改,而无需手动更新所有客户端应用程序

如果您想使用此功能,则仅为方便起见提供此功能


如果此应用程序仅暴露于您的内部网络(或仅暴露于您自己的计算机或Docker网络),则保留此应用程序绝对没有坏处

如果此应用程序暴露于公共网络,则需要开始询问自己是否希望攻击者知道配置端点提供的信息

攻击者只知道应用程序是身份验证服务器、到各个端点的路径、支持哪种类型的OAuth2流,以及其他一些小细节。如果您有面向公众的文档,那么这将是该文档的机器可读版本

与其专注于阻止对配置端点的访问,不如确保您的Auth服务器端点已通过身份验证。在分发令牌之前,您应该检查客户端Id和客户端机密是否存在并且正确

From(这是关于内省端点的,但实际上该原则适用于所有端点):

如果内省端点处于打开状态且未被阻止,则攻击者可以通过此方法轮询端点以查找有效令牌。为了防止这种情况,服务器必须要求使用端点对客户端进行身份验证,或者仅通过防火墙等其他方式使端点可供内部服务器使用


“因为它们都是内部的”,您的意思是整个应用程序不能从internet访问,只能在您的计算机/网络中访问?不,我的意思是应用程序是内部开发的,我可以在每个应用程序上指定这些端点。“因为它们都是内部的”,您的意思是整个应用程序不能从internet访问,仅在您的计算机/网络中?不,我的意思是应用程序是内部开发的,我可以在每个应用程序上指定这些端点。
// Note: setting the Authority allows the OIDC client middleware to automatically
// retrieve the identity provider's configuration and spare you from setting
// the different endpoints URIs or the token validation parameters explicitly.
Authority = "http://localhost:54540/"