SAMLv2身份验证筛选器

该插件为geoserver增加了对基于SAML的单一登录(SSO)的支持,该过程允许用户针对外部身份提供程序(如OneLogin)进行身份验证,而不是获取和使用由geoserver处理的单独用户名和密码。

必须将IDP配置为将geoserver用作服务提供程序(sp)。将在IDP中为geoserver分配唯一标识符(entityid)。这将用于将geoserver配置与idp配置匹配。

配置SAML身份验证筛选器

  1. 启动geoserver并以admin用户身份登录到Web管理用户界面。

  2. 单击导航边栏“安全”部分下的“身份验证”链接。

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

../../_images/saml02.png
  1. 单击samlv2链接。

../../_images/saml03.png

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_元数据

  1. 通过添加新的samlv2过滤器来更新过滤器链。

../../_images/saml04.png
  1. 为要使用IDP保护的每个筛选器链选择SAMLv2筛选器(例如Web)

../../_images/saml05.png

使用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

收件人

http://localhost:8080/geoserver/saml/SSO

ACS URL验证程序

^ http://localhost:8080/geoserver/saml/sso$

ACS网址

http://localhost:8080/geoserver/saml/SSO

单一注销URL

http://localhost:8080/geoserver/saml/SingleLogout

然后,写下您在 Issuer URL SSO配置页的字段:

../../_images/onelogin01.png

使用OneLogin进行测试

  1. 导航到geoserver主页并注销管理帐户。

  2. 再次尝试登录,您现在应该能够看到外部OneLogin表单。

../../_images/onelogin02.png
  1. 您可以使用位于https://admin.us.onelogin.com/users的OneLogin面板管理用户。

使用Samling进行测试

samling是一个无服务SAMLIDP,可以很容易地用于测试geoserver samlv2身份验证过滤器。

您可以配置一个新的SAMLv2身份验证过滤器,如下屏幕截图所示。

../../_images/samling01.png

特别是,您必须使用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>

最后,正确填写过滤器配置表单中的所有字段(尤其是为存储和证书选择的密码)。

  1. 检查使用SAML筛选器的筛选器链是否不包括匿名筛选器:

../../_images/saml05.png
  1. 再次尝试登录,您现在应该可以看到Samling登录表单了。

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

../../_images/samling03.png
  1. 点击回复!按钮,您将被重定向到geoserver并登录。

Previous: 用例
Next: WMT多维