SAMLv2身份验证筛选器¶
该插件为geoserver增加了对基于SAML的单一登录(SSO)的支持,该过程允许用户针对外部身份提供程序(如OneLogin)进行身份验证,而不是获取和使用由geoserver处理的单独用户名和密码。
必须将IDP配置为将geoserver用作服务提供程序(sp)。将在IDP中为geoserver分配唯一标识符(entityid)。这将用于将geoserver配置与idp配置匹配。
配置SAML身份验证筛选器¶
启动geoserver并以admin用户身份登录到Web管理用户界面。
单击导航边栏“安全”部分下的“身份验证”链接。

向下滚动到“身份验证筛选器”面板,然后单击“添加新链接”。

单击samlv2链接。

5.按如下所示填写设置表单的字段;您可以使用地理服务器角色源将特定组或角色分配给SAML用户。
参数 |
价值 |
---|---|
名字 |
分配给此筛选器的任何唯一名称 |
标识提供程序标识符 |
IDP分配给geoserver的命名(如果使用OneLogin,则这与OneLogin配置面板上的“访问群体”字段的值相同) |
SAML元数据URL |
如果IDP具有下载配置geoserver所需元数据的入口点,请将URL放在此处(如果您使用的是OneLogin,请从OneLogin配置面板复制元数据URL字段)。 |
SAML元数据XML |
如果IDP没有入口点来下载配置geoserver所需的元数据,则必须使用有效的SAMLv2元数据XML填充此字段,描述IDP和SP属性。 |
签署请求和响应 |
启用签名请求和验证响应签名(这要求授权请求已签名 |
包含签名证书的密钥库的路径 |
一个相对路径(在数据目录中)或一个Java密钥存储文件的绝对路径,其中存储本地签名的证书(如果启用签名则需要)。这里有一些关于如何创建这些证书的文档:https://docs.spring.io/autorepo/docs/spring security saml/1.0.x-snapshot/reference/htmlsingle/配置密钥管理私钥 |
密钥库的密码 |
打开上述密钥库所需的密码 |
密钥库中证书的条目ID |
密钥库中证书项的别名(ID) |
证书的密码 |
使用证书所需的密码 |
角色来源 |
角色源用于将角色分配给通过SAMLv2 IDP认证的用户,它可以是请求头(如果SSO基础结构将其添加到geoserver请求,则使用头)、用户组服务或角色服务。 |
SAMLv2协议的一些文档可以在这里找到:https://en.wikipedia.org/wiki/saml_2.0,而元数据xml的具体信息可以在这里找到:https://en.wikipedia.org/wiki/saml_2.0_saml_2.0_元数据
通过添加新的samlv2过滤器来更新过滤器链。

为要使用IDP保护的每个筛选器链选择SAMLv2筛选器(例如Web)

使用OneLogin作为IDP¶
您首先需要的是OneLogin中的一个帐户:https://www.onelogin.com/,它将处理登录过程,并最终向geoserver提供用户的身份验证凭据。
通过OneLogin进行身份验证的geoserver用户由OneLogin处理,对帐户执行的任何更改都由geoserver使用。地理服务器所需的唯一用户数据是每个用户的唯一标识符。
默认情况下,用户的电子邮件用作每个用户的唯一标识符。geoserver不存储密码。
实际上,地理服务器不在OneLogin应用程序目录中,因此我们可以使用OneLogin SAML测试连接器。有关配置SAML测试连接器的更多详细信息,请遵循以下指南:
在这个示例中,我们假设geoserver url是http://localhost:8080/geoserver,如果您有一个特定的geoserver域,请使用它。
在SAML测试连接器(IDP)配置页上,使用以下值作为参数:
参数 |
价值 |
---|---|
RelayState |
空的 |
观众 |
GeoServer |
收件人 |
|
ACS URL验证程序 |
|
ACS网址 |
|
单一注销URL |
然后,写下您在 Issuer URL
SSO配置页的字段:

使用OneLogin进行测试¶
导航到geoserver主页并注销管理帐户。
再次尝试登录,您现在应该能够看到外部OneLogin表单。

您可以使用位于https://admin.us.onelogin.com/users的OneLogin面板管理用户。
使用Samling进行测试¶
samling是一个无服务SAMLIDP,可以很容易地用于测试geoserver samlv2身份验证过滤器。
您可以配置一个新的SAMLv2身份验证过滤器,如下屏幕截图所示。

特别是,您必须使用keytool命令创建一个jks keystore,并将其存储在geoserver data dir的saml子文件夹中(为keystore选择一个正确的密码,为证书选择另一个密码)。
keytool -genkeypair -alias geoserversaml -keypass <certificate_password> -keystore samlKeystore.jks
然后使用以下元数据XML:
<md:EntitiesDescriptor xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui">
<md:EntityDescriptor entityID="geoserver">
<md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>__SELF_SIGNED_CERTIFICATE</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:AssertionConsumerService
Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="http://localhost:8080/geoserver/saml/SSO"
index="0" />
<md:AttributeConsumingService index="1">
<md:RequestedAttribute FriendlyName="mail"
Name="urn:oid:0.9.2342.19200300.100.1.3"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
isRequired="true" />
<md:RequestedAttribute FriendlyName="eduPersonPrincipalName"
Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
isRequired="true" />
</md:AttributeConsumingService>
</md:SPSSODescriptor>
</md:EntityDescriptor>
<md:EntityDescriptor entityID="https://capriza.github.io/samling/samling.html"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui">
<md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<!-- IDP certificate -->
<ds:X509Certificate>MIICpzCCAhACCQDuFX0Db5iljDANBgkqhkiG9w0BAQsFADCBlzELMAkGA1UEBhMC
VVMxEzARBgNVBAgMCkNhbGlmb3JuaWExEjAQBgNVBAcMCVBhbG8gQWx0bzEQMA4G
A1UECgwHU2FtbGluZzEPMA0GA1UECwwGU2FsaW5nMRQwEgYDVQQDDAtjYXByaXph
LmNvbTEmMCQGCSqGSIb3DQEJARYXZW5naW5lZXJpbmdAY2Fwcml6YS5jb20wHhcN
MTgwNTE1MTgxMTEwWhcNMjgwNTEyMTgxMTEwWjCBlzELMAkGA1UEBhMCVVMxEzAR
BgNVBAgMCkNhbGlmb3JuaWExEjAQBgNVBAcMCVBhbG8gQWx0bzEQMA4GA1UECgwH
U2FtbGluZzEPMA0GA1UECwwGU2FsaW5nMRQwEgYDVQQDDAtjYXByaXphLmNvbTEm
MCQGCSqGSIb3DQEJARYXZW5naW5lZXJpbmdAY2Fwcml6YS5jb20wgZ8wDQYJKoZI
hvcNAQEBBQADgY0AMIGJAoGBAJEBNDJKH5nXr0hZKcSNIY1l4HeYLPBEKJLXyAno
FTdgGrvi40YyIx9lHh0LbDVWCgxJp21BmKll0CkgmeKidvGlr3FUwtETro44L+Sg
mjiJNbftvFxhNkgA26O2GDQuBoQwgSiagVadWXwJKkodH8tx4ojBPYK1pBO8fHf3
wOnxAgMBAAEwDQYJKoZIhvcNAQELBQADgYEACIylhvh6T758hcZjAQJiV7rMRg+O
mb68iJI4L9f0cyBcJENR+1LQNgUGyFDMm9Wm9o81CuIKBnfpEE2Jfcs76YVWRJy5
xJ11GFKJJ5T0NEB7txbUQPoJOeNoE736lF5vYw6YKp8fJqPW0L2PLWe9qTn8hxpd
njo3k6r5gXyl8tk=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://capriza.github.io/samling/samling.html"/>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://capriza.github.io/samling/samling.html"/>
</md:IDPSSODescriptor>
</md:EntityDescriptor>
</md:EntitiesDescriptor>
最后,正确填写过滤器配置表单中的所有字段(尤其是为存储和证书选择的密码)。
检查使用SAML筛选器的筛选器链是否不包括匿名筛选器:

再次尝试登录,您现在应该可以看到Samling登录表单了。

在“名称标识符”字段中输入您选择的用户名(例如samluser),然后单击“下一步”按钮。

点击回复!按钮,您将被重定向到geoserver并登录。