在本文中,我将告诉您我们如何从NTLM切换到Oracle Weblogic Server上的应用程序的Kerberos授权,从而通过消除输入密码的需要来简化用户登录。 所有用户以及应用程序服务器都在同一个域中;还预先配置了Weblogic服务器应用程序的域授权。 所有配置均已在WLS 12.1.2上进行了验证。
首先,简要介绍一下理论,以进一步了解交互过程。
什么是单点登录?
单一登录(SSO)是一种机制,通过该机制,单个用户身份验证操作可以使用户访问其有权访问的所有计算机和系统,而无需输入多个密码。 先前输入的凭据将被各个组件透明地重用。
什么是Kerberos?
Kerberos是一种网络认证协议,最早由麻省理工学院开发。 Kerberos是一种对网络上的服务请求进行身份验证的安全方法,旨在使用带有密钥的加密技术为客户端-服务器应用程序提供强身份验证。
什么是SPNEGO?
SPNEGO是一个简单且安全的GSSAPI协商引擎。 这是用于身份验证的标准接口(例如,用于目录搜索的JNDI),Windows上SPNEGO的默认实现是Kerberos(例如,用于JNDI的LDAP)。 Microsoft术语使用“集成Windows身份验证”作为SPNEGO的同义词。 在Windows集成身份验证中,可以协商Kerberos或NTLM协议。
服务器从Internet Explorer(IE 6.1或更高版本)收到请求时,可能会请求浏览器使用SPNEGO协议进行身份验证。 该协议通过HTTP执行Kerberos身份验证,并允许Internet Explorer委派委派的授权,以便Web应用程序可以代表用户登录到后续的Kerberized服务。
当HTTP服务器要运行SPNEGO时,它将对标题为“ WWW-Authorization:Negotiate”的HTTP请求返回“ 401未经授权”响应。 然后,Internet Explorer与票务服务(TGS)联系以获得票证。 他选择服务参与者的特殊名称来请求票证,例如:
HTTP/webserver@<DOMAIN NAME>
然后,将返回的票证包装在SPNEGO令牌中,该令牌被编码并使用HTTP请求发送回服务器。 令牌展开,票证通过身份验证。
Kerberos的好处
一旦所有网络客户端都可以对Kerberos进行身份验证,使用Kerberos使管理员可以禁用NTLM身份验证。 Kerberos比NTLM更灵活和高效,并且更安全。
在Weblogic应用程序服务器环境中配置基于Kerberos的SSO
互动方案:

- 当注册用户(PC)向Oracle WebLogic Server(WLS)请求资源时,它将发送原始HTTP GET请求。
- 执行SPNEGO令牌代码的Oracle WebLogic Server(WLS)服务器需要身份验证,并发出401 Access Denied,WWWAuthenticate:Negotiate response。
- 客户端(PC上的浏览器)从TGS / KDC(AD)请求会话票证。
- TGS / KDC(AD)为客户提供包装在SPNEGO令牌中的必需的Kerberos票证(前提是该客户已获得授权)。
- 客户端在授权标头中重新发送HTTP GET请求+协商SPNEGO令牌:协商base64(令牌)。
- 在Weblogic服务器上验证SPNEGO Web身份验证会看到带有SPNEGO令牌的HTTP标头。 SPNEGO检查SPNEGO令牌并获取用户信息。
- Weblogic收到用户信息后,它将在Microsoft Active Directory / KDC中验证用户。 身份验证过程完成后,Weblogic将执行相应的Java代码(servlet,JSP,EJB等)并检查授权。
- Oracle WebLogic Server令牌处理程序处理程序代码通过GSS API接受和处理令牌,对用户进行身份验证,并使用请求的URL进行响应。
现在开始练习
1.我们在配置了TGS / KDC服务的控制器域的服务器端执行设置。
- 在Active Directory中创建用户(密码不得过期)
- 为WLS服务器名称设置适当的SPN
执行SPN建立的验证
setspn –l HTTP_weblogic
应该返回两个记录
生成密钥表文件
ktpass -princ HTTP_weblogic@mycompany.com -pass PASSWORD -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -kvno 0 -out c:\krb5.keytab
将此文件复制到WLS服务器
2. WLS服务器设置
- 您需要在%windir%中创建krb5.ini文件:C:\ Windows文件夹。 该文件包含客户端的配置设置,例如KDC所在的位置。 该文件将如下所示:
[libdefaults] default_realm = <DOMAIN NAME> ticket_lifetime = 600 [realms] <DOMAIN NAME> = { kdc = <HOSTNAME OF AD/KDC> admin_server = <HOSTNAME OF AD/KDC> default_domain = <DOMAIN NAME> } [domain_realm] . <DOMAIN NAME>= <DOMAIN NAME> [appdefaults] autologin = true forward = true forwardable = true encrypt = true
com.sun.security.jgss.krb5.initiate { com.sun.security.auth.module.Krb5LoginModule required principal="user@MYCOMPANY.COM" useKeyTab=true keyTab=krb5.keytab storeKey=true debug=true; }; com.sun.security.jgss.krb5.accept { com.sun.security.auth.module.Krb5LoginModule required principal="user@MYCOMPANY.COM" useKeyTab=true keyTab=krb5.keytab storeKey=true debug=true; };
请注意,域名必须为
大写 。 对于早期版本,请在以前的配置中使用com.sun.security.jgss.initiate,而不要使用com.sun.security.jgss.krb5.initiate。
- krb5Login.conf和krb5.keytab文件都必须位于WLS服务器域目录的根目录中。
找到行集JAVA_OPTIONS =%JAVA_OPTIONS%并在末尾添加
-Djava.security.auth.login.config=< >\krb5Login.conf -Djavax.security.auth.useSubjectCredsOnly=false -Dweblogic.security.enableNegotiate=true
- 在这种情况下,我们不考虑在AD中设置WLS授权,我们认为它可以工作,如果需要绘制此项目,请在注释中写上。
- 在WLS中配置SPNEGO
为此,请转到WebLogic Server管理控制台
转到“安全领域”>“ myrealm”>“提供程序”部分,然后单击“添加”按钮
选择“ WebLogic协商身份声明提供程序”的类型
检查是否选择了两个参数。

我们按下“重新排序”按钮,并控制箭头设置授权类型的顺序。 首先应安装WebLogic协商身份声明提供程序,其次应安装执行LDAP身份验证(域授权)的提供程序

- 接下来,您需要告诉应用程序CLIENT-CERT授权方法,这些更改将应用到应用程序的web.xml文件中
<security-constraint> <display-name>Security Constraint for SSO </display-name> <web-resource-collection> <web-resource-name>My webapp</web-resource-name> <description>Group of Users</description> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>valid-users</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>CLIENT-CERT</auth-method> </login-config> <security-role> <description>Role description</description> <role-name>valid-users</role-name> </security-role>
该角色必须预先安装在系统中。 在我们的示例中,使用了ADF的内置角色(有效用户),并且进一步基于域组授予权限。
要确定授权问题,必须启用调试。 为此,请转至该部分。
环境->服务器,选择我们的服务器->调试-> weblogic(expand)->安全-> atn,选中该框并启用它。

要启用和禁用调试,不需要重新启动。
登录到域计算机,单击应用程序链接,然后在不输入密码的情况下登录。 值得注意的是,应用程序中的“退出”按钮在此配置下将不起作用。