6.2 Authentication
此页面管理身份验证选项,包括身份验证程序和身份验证链。
6.2.1 Logout settings
注销登录后跳转到的URL地址,可以是空,绝对或相对URL地址。
6.2.2 SSL settings
SSL端口设置,默认是443。
6.2.3 Brute force attack prevention settings
GeoServer可通过主动延迟来预防暴力攻击,该页面用于设置相关参数。
-
Enabled:是否启用暴力攻击防预功能,默认启用;
-
Minimum delay on failed authentication (seconds):当登录失败时,在获得响应之前,将等待的最小秒数,默认为1秒;
-
Maximum delay on failed authentication (seconds):当登录失败时,在获得响应之前,将等待的最大秒数,默认为5秒;
-
Excluded network masks (comma separated):排除的网络掩码列表,用于标识从暴力攻击防范中排除的主机。可以为空,特定IP或网络掩码列表。默认为127.0.0.1,但设置为127.0.0.1似乎并没有什么用,而要设置为本机IP地址;
-
Maximum number of threads blocked on failed login delay:限制登录失败时延迟的线程数,应设置为小于容器可用的线程数。
6.2.4 Authentication Filters
Authentication Filters用于管理身份认证过滤器(添加,删除和编辑)。默认情况下GeoServer配置了四个身份认证过滤器(anonymous,
basic,form和rememberme)。
同时也可以通过点击“Add new”来添加其他过滤器。
- Anonymous
默认情况下,GeoServer允许匿名访问管理界面,但只能查看图层预览,功能文档和“关于GeoServer”中的基本信息。通过移除anonymous可以删除匿名访问。但删除后,如果还修改了其他配置需要保存时,将会遇到如下错误,表示需要从对应的Filter
Chain中删除anonymous,参见6.2.5。
但是一旦这样做之后,将可能导致无法访问GeoServer登录页面,是不是很可怕,所以最好不要轻易尝试。若您不小心删除了的话,也不用担心,可以通过以下方法恢复:
在<data_dir>\security\filter\anonymous下新建文件config.xml,编辑文件内容如下:
<anonymousAuthentication>
<id>6505f211:16cd1fa4b32:-7ffe</id>
<name>anonymous</name>
<className>org.geoserver.security.filter.GeoServerAnonymousAuthenticationFilter</className>
</anonymousAuthentication>
然后在<data_dir>\security\config.xml文件中增加如下内容:
保存后重启GeoServer就可以了。
- Basic
使用HTTP基本认证。当客户端发送http
请求给服务器,服务器验证该用户是否已经登录,如果没有的话,服务器会返回一个401给客户端,并且在Response的header中添加WWW-Authenticate;浏览器在接受到401后,会弹出登录验证的对话框(如下图),用户输入用户名和密码重新登录。
- Form
即通过表单验证用户名密码,其中Username parameter和Password
parameter就是表单参数名。
- Rememberme
用户登录后,服务端为用户生成一个Token,并放入客户端Cookie中。下次用户登录时,服务端验证Cookie中的Token并自动登录。
在登录GeoServer时勾选Remember
me,然后重启GeoServer(由于注销登录会重新生成Token,所以重启GeoServer来模拟用户退出登录以保留Token),这时仍然可以访问GeoServer的任意页面,因为浏览器已经从Cookie中获取登录信息并且重新登录。
- J2EE
诸如Tomcat和Jetty之类的Servlet容器提供了自己的身份认证。GeoServer完全可以委托给servlet容器进行身份认证。
- X.509
X.509格式证书是被广泛使用的数字证书标准。GeoServer可以通过提取X.509证书的Common
Name (CN)进行身份验证。
- HTTP Header
类似J2EE,不同的是J2EE通过getUserPrincipal方法获取用户信息,而HTTP
Header是从HTTP头中获取用户信息,Request header
attribute就是用于设置该请求头名称的。
- Digest
Digest authentication与Basic认证类似,只是加密方法不同,Basic认证是把用户和密码通过base64加密后发送给服务器,这种方案非常不安全。Digest认证则是用户名和密码结合起来进行不可逆的摘要加密运算得到一个值发送给服务器。
- Credentials From Headers
此筛选器可以通过灵活且可配置的方式从请求头中收集用户凭据(用户名和密码),其配置参数如下:
-
Username Header:包含用户名的请求标头的名称;
-
Regular Expression for Username:用于从相关请求头中提取用户名的正则表达式;
-
Password Header:包含密码的请求头的名称;
-
Regular Expression for Password:用于从相关请求头中提取密码的正则表达式;
-
Parse Arguments as Uri Components:提取的用户名密码是否需要进行Uri解码。
Authentication Providers
Authentication
Providers用于添加,删除和编辑身份认证程序,默认的身份认证程序是使用用户名/密码验证,也可以使用JDBC和LDAP身份验证。
点击“Add new”或者在列表中点击想要修改的身份验证程序,跳转到身份验证程序配置页面。在“Add
new”页面中可以选择身份验证程序,其中Username Password验证是默认选择的:
-
Username Password:用户名/密码验证比例简单,只需要设置命名和关联的用户组服务(用户组服务见6.4.1)即可;
-
JDBC
通过JDBC进行身份验证,简单理解为可以使用数据库的用户名密码登录GeoServer,配置选项除命名和关联的用户组服务外,还有JDBC连接参数,如下所示:
-
Driver class name:用于连接数据库的JDBC驱动程序,默认支持org.hsqldb.jdbc.JDBCDriver、org.postgresql.Driver、org.h2.Driver和org.sqlite.JDBC四种;
-
Connection URL:用于创建数据库连接的URL,例如jdbc:postgresql://localhost:5432/postgres;
-
User name/Password:用于测试连接的用户名密码。
- LDAP
通过LDAP进行身份验证。LDAP是轻量目录访问协议,英文全称是Lightweight Directory
Access Protocol,简称为LDAP。
LDAP身份验证程序的配置选项可分为两部分,LDAP基本参数配置和身份验证参数设置。若要把LDAP完全讲清楚不是一件容易的事,需要大量篇幅,因此,在这里只简单介绍一下,如果您对LDAP非常感兴趣可自行查阅相关资料。
-
Server
URL:连接LDAP服务器的URL,例如ldap://domain-controller/dc=ad,dc=local; -
TLS:是否启用STARTTLS连接(STARTTLS是一种明文通信协议的扩展,能够让明文的通信连接直接转为加密连接);
-
User lookup
pattern:用户dn过滤规则,Pattern中应包含占位符{0}来替换用户的uid,示例:uid={0},ou=people; -
Filter used to lookup
user:用户过滤器,示例:(|(userPrincipalName={0})(sAMAccountName={1})); -
Format used for user login name:登录用户名格式化字符串,需与Filter used to
lookup user配合使用,示例:{0}@ad.local; -
Username/Password:用于测试连接的用户名密码;
-
Use LDAP groups for
authorization:使用LDAP组进行角色分配,不勾选时使用用户/组服务进行角色分配,默认是勾选的。以下参数都是在勾选此项时才有; -
Bind user before searching for groups:在进行组搜索之前是否绑定LDAP服务器;
-
Group search base:指定从哪个分支开始查找用户组,示例:cn=Users;
-
Group search filter:用户组过滤规则,示例:member={0};
-
Group to use as ADMIN:要映射到管理员角色(ADMIN)的组名称;
-
Group to use as GROUP_ADMIN:要映射到管理员组角色(GROUP_ADMIN)的组名称。
6.2.6 Filter Chains和Provider Chain
在把请求发送给相应的服务或处理程序之前,GeoServer首先通过身份认证链过滤请求。请求将按顺序传递给链中的每个认证机制,每个机制都将对请求进行身份认证。如果链中的某个机制能够成功进行身份验证,则请求将发送给正确的服务或处理程序。否则,向用户返回授权错误(通常是HTTP 401)。
对于GeoServer,身份认证链实际上由两个链组成:一个过滤器链(Filter Chains),用于确定请求是否需要进行身份认证;另一个是身份认证程序链(Provider Chain),用于执行实际身份认证。
过滤器链执行的任务包括:
-
从请求中收集用户凭据,例如从Basic和Digest Authentication头中收集;
-
处理事件,例如注销时结束会话,或勾选Remember Me时设置浏览器cookie;
-
执行会话集成,检测现有会话并在必要时创建新会话;
-
调用身份认证程序链以执行身份认证。