Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
本文介绍 使用 Kerberos 和 SPNEGO在Joget Workflow 和Microsoft Active Directory之间进行单点登录(SSO)
Kerberos是由麻省理工学院(MIT)为客户端 - 服务器环境中的SSO 设计的网络身份验证协议 ,而SPNEGO(简单和受保护的GSS-API协商机制)将Kerberos SSO扩展到Web应用程序。
测试环境
Joget Server: Joget Workflow v6 Enterprise on Apache Tomcat 8 and Java 8
Windows Server: Windows Server 2012 R2 Datacenter (running on VirtualBox within a NAT Network, downloaded from https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2012-r2)
Windows Client PC: IE11 on Windows 10 (running on VirtualBox within a NAT Network, downloaded from https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/)
测试设置
Windows Server 计算机名称 是 WIN-TKDH9LCHUUO
WINDOWS 域是 windows.local
域用户是 joget
JOGET 域名 是 joget.windows.local
本文假设您熟悉Windows Server和Windows 10系统以及网络管理的基础知识
此设置在本地VirtualBox环境中进行测试。应相应调整不同环境的实际设置
转到“服务器管理器”>“添加角色和功能”以安装DNS服务器。
在网络和共享中心中,配置网络适配器,以便首选DNS服务器为127.0.0.1。
在DNS管理器中,右键单击服务器名称并配置DNS服务器为windows.local创建正向查找区域
在windows.local DNS区域中,为joget添加A记录以指向Joget服务器IP
测试ping以确保joget.windows.local解析为正确的IP
在“Active Directory用户和计算机”中,创建域用户joget。这是要映射到Joget服务器使用的服务名称的用户帐户
在PowerShell中,执行:setspn -s HTTP / {JOGET DOMAIN} {DOMAIN USER}例如
setspn -s HTTP/JOGET.WINDOWS.LOCAL joget
在PowerShell中,检查SPN是否已注册
setspn -L joget
应该显示
Registered ServicePrincipalNames for CN=Joget,CN=Users,DC=windows,DC=local: HTTP/JOGET.WINDOWS.LOCAL
编辑 /etc/hosts (Linux or macOS) 或者 C:\Windows\System32\drivers\etc\hosts (Windows) 并且添加服务 IP ,比如
192.168.56.102 windows.local win-tkdh9lchuuo win-tkdh9lchuuo.windows.local
注意:如果Joget Server使用Windows Server作为DNS服务器,则不需要此步骤。
在Windows Server上的PowerShell中,使用Ktpass工具生成密钥表文件
ktpass -out joget.keytab -mapuser joget@WINDOWS.LOCAL -pass Pass@word1 -crypto all -ptype KRB5_NT_PRINCIPAL -princ HTTP/joget.windows.local@WINDOWS.LOCAL
将生成的joget.keytab文件复制到Joget服务器,例如C:\Joget-v6-Enterprise\wflow\joget.keytab
Kerberos身份验证可能需要Java 8才能使用ktpass生成的密钥表。 下载并安装JDK 8,并编辑tomcat-run.bat启动脚本以相应地更新JAVA_HOME路径。
安装krb5-user软件包
sudo apt-get install krb5-user
and configure the realm as WINDOWS.LOCAL and the KDC as WIN-TKDH9LCHUUO.WINDOWS.LOCAL:88
在终端中,执行
kinit joget@WINDOWS.LOCAL
重要说明:域名必须为大写
该命令应该运行没有错误
在/etc/krb5.conf中确认配置
[libdefaults] default = WINDOWS.LOCAL default_realm = WINDOWS.LOCAL dns_lookup_realm = true dns_lookup_kdc = true [realms] WINDOWS.LOCAL = { kdc = WIN-TKDH9LCHUUO.WINDOWS.LOCAL:88 default_domain = WINDOWS.LOCAL } [domain_realm] .windows.local = WINDOWS.LOCAL windows.local = WINDOWS.LOCAL
重要说明:域名必须为大写
在终端中,使用以下命令生成密钥表文件:
ktutil ktutil: add_entry -password -p HTTP/JOGET.WINDOWS.LOCAL@WINDOWS.LOCAL -k 1 -e arcfour-hmac-md5 Password for HTTP/JOGET.WINDOWS.LOCAL@WINDOWS.LOCAL: ktutil: wkt /etc/joget.keytab
使用以下方法列出密钥表中的SPN:
ktutil ktutil: rkt /etc/joget.keytab ktutil: list
在终端中,运行
kinit joget@WINDOWS.LOCAL
重要说明:域名必须为大写
该命令应该没有错误地运行,或者只是警告“用于身份验证的加密类型arcfour-hmac-md5(23)很弱并且将被弃用”
编辑 /etc/krb5.conf
[libdefaults] default = WINDOWS.LOCAL default_realm = WINDOWS.LOCAL dns_lookup_realm = true dns_lookup_kdc = true [realms] WINDOWS.LOCAL = { kdc = WIN-TKDH9LCHUUO.WINDOWS.LOCAL:88 default_domain = WINDOWS.LOCAL } [domain_realm] .windows.local = WINDOWS.LOCAL windows.local = WINDOWS.LOCAL
重要说明:域名必须为大写
在终端中, 生成一个 keytab 文件:
ktutil -k joget.keytab add -p HTTP/JOGET.WINDOWS.LOCAL@WINDOWS.LOCAL -e arcfour-hmac-md5 -V 1
使用以下方法列出密钥表中的SPN:
ktutil -k joget.keytab list
保留生成的joget.keytab文件的副本,例如在/etc/joget.keytab中
从Joget Marketplace 下载 Kerberos目录管理器插件,并将其上载到设置>管理插件中.
在“设置”>“目录管理器”中,选择Kerberos目录管理器插件,然后键入配置中的相应值:
服务主体:HTTP/JOGET.WINDOWS.LOCAL
Keytab文件的路径:/etc/joget.keytab(Linux)或C:/Joget-v6-Enterprise/wflow/joget.keytab(Windows)
Debug Enabled:查看日志中的调试信息
请记住将LDAP目录管理器配置为外部目录管理器以从Active Directory检索用户。
在“设置”>“常规设置”中,将API域白名单设置为 * 以允许对Kerberos目录管理器的SSO请求。
确保可以从客户端PC在网络上访问Windows Server
将DNS服务器设置为Windows Server的IP地址.
ping Windows域名进行测试。
单击文件资源管理器,右键单击此PC,然后选择属性。单击计算机名称旁边的“更改设置”。单击“更改”并设置域,例如windows.local,在出现提示时键入域管理员登录名。加入域后重新启动成功,并以域用户身份登录。
在IE中,单击Internet选项>安全性>本地Intranet站点>高级,然后添加Joget域,例如 http://joget.windows.local
使用Kerberos目录管理器插件方法,访问 http://joget.windows.local/jw/web/json/plugin/org.joget.plugin.kerberos.KerberosDirectoryManager/service 到SSO。
请注意,要使SSO正常工作:
客户端PC和Joget服务器必须驻留在不同的计算机上
Windows服务器和客户端PC必须位于同一Windows域中
https://technet.microsoft.com/en-us/library/hh831553(v=ws.11).aspx
https://msftplayground.com/2009/08/configure-kerberos-authentication/
https://technet.microsoft.com/en-us/library/cc731241(v=ws.11).aspx
https://technet.microsoft.com/en-us/library/hh831553(v=ws.11).aspx
https://msftplayground.com/2009/08/configure-kerberos-authentication/
https://venkatsadasivam.com/2009/08/29/single-sign-on-in-java-platform/
http://docs.spring.io/spring-security-kerberos/docs/1.0.1.RELEASE/reference/htmlsingle/
https://tomcat.apache.org/tomcat-8.0-doc/windows-auth-howto.html
http://docs.oracle.com/javase/jndi/tutorial/ldap/security/gssapi.html
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part1.html#PART1
https://docs.oracle.com/cd/E23943_01/web.1111/e13707/sso.htm#SECMG481
https://stackoverflow.com/questions/25289231/using-gssmanager-to-validate-a-kerberos-ticket