Spring Security Kerberos 示例

参考文档的这一部分介绍了示例项目。可以通过从 github.com/spring-projects/spring-security-kerberos 构建主发行版来手动编译示例。

如果您按原样运行示例,则在应用正确的配置之前它将无法工作。请参阅下面的说明以了解特定示例。

安全服务器端身份验证示例 使用服务器端身份验证器的示例

安全服务器 Spnego 和表单身份验证示例 使用 Spnego 和表单进行票证验证的示例

安全服务器 Spnego 和表单身份验证 XML 示例 使用 Spnego 和表单进行票证验证的示例(XML 配置)

安全客户端 KerberosRestTemplate 示例 KerberosRestTemplate 的示例

安全服务器 Windows 身份验证示例

此示例的目标

  • 在 Windows 环境中,用户将能够使用在登录 Windows 时输入的 Windows Active Directory 凭据登录应用程序。不应该有任何提示输入用户 ID/密码凭据。

  • 在非 Windows 环境中,将向用户显示一个屏幕以提供 Active Directory 凭据。

server:
    port: 8080
    app:
        ad-domain: EXAMPLE.ORG
        ad-server: ldap://WIN-EKBO0EQ7TS7.example.org/
        service-principal: HTTP/[email protected]
        keytab-location: /tmp/tomcat.keytab
        ldap-search-base: dc=example,dc=org
        ldap-search-filter: "(| (userPrincipalName={0}) (sAMAccountName={0}))"

在上面,您可以看到此示例的默认配置。您可以使用普通的 Spring Boot 技巧(例如使用命令行选项或自定义 application.yml 文件)来覆盖这些设置。

运行服务器。

$ java -jar sec-server-win-auth-2.1.1.jar

您可能需要使用 Linux 的自定义 Kerberos 配置,方法是使用 -Djava.security.krb5.conf=/path/to/krb5.iniGlobalSunJaasKerberosConfig bean。

有关如何在 Windows Kerberos 环境中工作的更多说明,请参阅 设置 Windows 域控制器

使用域凭据登录到 Windows 8.1 并访问示例

ie1 ie2

从非 Windows VM 访问示例应用程序,并手动使用域凭据。

ff1 ff2 ff3

安全服务器端身份验证示例

此示例演示了服务器如何能够使用通过表单登录传递的用户凭据针对 Kerberos 环境对用户进行身份验证。

运行服务器。

$ java -jar sec-server-client-auth-2.1.1.jar
server:
    port: 8080

安全服务器 Spnego 和表单身份验证示例

此示例演示了如何配置服务器以接受来自浏览器的基于 Spnego 的协商,同时仍能够回退到基于表单的身份验证。

使用 user1 主体 设置 MIT Kerberos,使用凭据手动进行 Kerberos 登录。

$ kinit user1
Password for [email protected]:

$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: [email protected]

Valid starting     Expires            Service principal
10/03/15 17:18:45  11/03/15 03:18:45  krbtgt/[email protected]
  renew until 11/03/15 17:18:40

或使用密钥表文件。

$ kinit -kt user2.keytab user1

$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: [email protected]

Valid starting     Expires            Service principal
10/03/15 17:25:03  11/03/15 03:25:03  krbtgt/[email protected]
  renew until 11/03/15 17:25:03

运行服务器。

$ java -jar sec-server-spnego-form-auth-2.1.1.jar

现在您应该能够打开浏览器并让它使用现有票证进行 Spnego 身份验证。

有关将浏览器配置为使用 Spnego 的更多说明,请参阅 配置浏览器以进行 Spnego 协商

server:
    port: 8080
app:
    service-principal: HTTP/[email protected]
    keytab-location: /tmp/tomcat.keytab

安全服务器 Spnego 和表单身份验证 XML 示例

此示例与 安全服务器 Spnego 和表单身份验证示例 相同,但使用基于 XML 的配置而不是 JavaConfig。

运行服务器。

$ java -jar sec-server-spnego-form-auth-xml-2.1.1.jar

安全客户端 KerberosRestTemplate 示例

这是一个使用 Spring RestTemplate 访问 Kerberos 保护资源的示例。您可以将其与 安全服务器 Spnego 和表单身份验证示例 结合使用。

默认应用程序配置如下所示。

app:
    user-principal: [email protected]
    keytab-location: /tmp/user2.keytab
    access-url: http://neo.example.org:8080/hello

使用 user1 主体 设置 MIT Kerberos,使用凭据手动进行 Kerberos 登录。

$ java -jar sec-client-rest-template-2.1.1.jar --app.user-principal --app.keytab-location

在上面,我们只是将 app.user-principalapp.keytab-location 设置为空值,这将禁用密钥表文件的使用。

如果操作成功,您应该会看到以下输出,其中包含 [email protected]

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
  <head>
    <title>Spring Security Kerberos Example</title>
  </head>
  <body>
    <h1>Hello [email protected]!</h1>
  </body>
</html>

或者使用带有密钥表文件的 user2

$ java -jar sec-client-rest-template-2.1.1.jar

如果操作成功,您应该会看到以下输出,其中包含 [email protected]

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
  <head>
    <title>Spring Security Kerberos Example</title>
  </head>
  <body>
    <h1>Hello [email protected]!</h1>
  </body>
</html>