Single sign on 使用带有spring security kerberos扩展名的keytab文件

Single sign on 使用带有spring security kerberos扩展名的keytab文件,single-sign-on,spring-security-kerberos,Single Sign On,Spring Security Kerberos,我的目标是:在基于java的web应用程序上实现SSO。 我的问题:我不是保安 经过一些调查,我发现我需要的是SpringSecurityKerberos扩展(也研究了ApacheShiro,但只能找到带有登录页面的示例) 我在以下项目中使用了这些样本: 我意识到我需要创建一个键表。当我尝试使用keytab时,出现以下错误: javax.security.auth.login.LoginException: Unable to obtain password from user Except

我的目标是:在基于java的web应用程序上实现SSO。 我的问题:我不是保安

经过一些调查,我发现我需要的是SpringSecurityKerberos扩展(也研究了ApacheShiro,但只能找到带有登录页面的示例)

我在以下项目中使用了这些样本:

我意识到我需要创建一个键表。当我尝试使用keytab时,出现以下错误:

javax.security.auth.login.LoginException: Unable to obtain password from user
Exception: krb_error 14 KDC has no support for encryption type (14) KDC has no support for encryption type
KrbException: KDC has no support for encryption type (14)
查找有关此错误的一些详细信息时,我发现它可能是由错误导致的,但这里的情况并非如此-我调试到源代码中,并看到加载了keytab文件

所以我决定检查一下我的键盘,看看是否正常。 首先,这是我用来创建keytab的最后一个命令(经过长时间的演变):

ktpass /out http-web.keytab /mapuser MyUser@MYDOMAIN.COM /princ HTTP/MyUser@MYDOMAIN.COM /pass MyPass /ptype KRB5_NT_PRINCIPAL
kinit MyUser@MYDOMAIN.COM -k -t http-web.keytab
当然,我使用以下命令为MyUser创建了一个SPN:

setspn -a HTTP/MyUser@MYDOMAIN.COM MYDOMAIN.COM\MyUser
kinit MyUser@MYDOMAIN.COM
我用以下方法测试了spn:

setspn -Q HTTP/MyUser@MYDOMAIN.COM
并取得了成功的成果:

Checking domain DC=mydomain,DC=com CN=MyUser,OU=MyOrg,DC=mydomain,DC=com
    HTTP/MyUser
    HTTP/MyUser@MYDOMAIN.COM
找到现有的SPN

现在,我想测试是否可以通过运行以下命令为MyUser获取票证:

setspn -a HTTP/MyUser@MYDOMAIN.COM MYDOMAIN.COM\MyUser
kinit MyUser@MYDOMAIN.COM
我得到了一个成功的结果(“新票证存储在缓存文件中…”)

现在我想用我的keytab测试它:

ktpass /out http-web.keytab /mapuser MyUser@MYDOMAIN.COM /princ HTTP/MyUser@MYDOMAIN.COM /pass MyPass /ptype KRB5_NT_PRINCIPAL
kinit MyUser@MYDOMAIN.COM -k -t http-web.keytab
获取了以下异常:

Exception: krb_error 0 Do not have keys of types listed in default_tkt_enctypes available; only have keys of following type:  No error KrbException: Do not have keys of types listed in default_tkt_enctypes available; only have keys of following type:
我使用klist工具查看我的keytab是否包含任何键:

klist -e -K -k -t  http-web.keytab
得到以下结果:

KVNO: 8
Key type: 23
Key: 0x47bf8039a8506cd67c524a03ff84ba4e
Time stamp: Jan 01, 1970 02:00
作为最后一次绝望的尝试,我为MyUser检查了以下帐户选项:

  • 为此帐户使用Kerberos DES加密类型
  • 该帐户支持Kerberos AES 128位加密
  • 该帐户支持Kerberos AES 256位加密
我不确定设置这些选项是否导致了它,但现在当我运行

kinit MyUser@MYDOMAIN.COM
我得到以下错误:

javax.security.auth.login.LoginException: Unable to obtain password from user
Exception: krb_error 14 KDC has no support for encryption type (14) KDC has no support for encryption type
KrbException: KDC has no support for encryption type (14)
所以我有点绝望,我真的不知道我在做什么。这完全是一个反复试验(主要是错误)的问题。 如果有人能带我走过这里,我将不胜感激

谢谢,
Lior原来是个愚蠢的错误。 我在spring中注入了用户帐户,而不是主体名称作为servicePrincipal