-
SSO单点登录问题求解10
现在我们公司因为应用系统比较多,新开发OA系统后,决定采用单点登录,现在我们大致的情况是这样的:
第一步:统一域账户;(已经完成)
第二步:单点登录采用CAS的方式,客户端服务器已经配置完成,并且已经实现单点登录;(已经完成)、
第三步:存在问题
现在进域账户的PC都能正常实现SSO,但是,没有加域的计算机,在SSO的时候,首先会弹出一个域账户登录框,然后取消或者输入后,才进入CAS认证页面,这样就出现要输入两次用户名和密码情况
请求各位大师帮忙解决:
如果能不弹出域账户登陆框,直接进入CAS认证页面,这样就可以
或者,输入域账户信息,然后CSA能够自动获取,实现SSO也可以
谢谢
问题补充:<div class="quote_title">城的灯 写道</div><div class="quote_div">首先问一个问题你进行域验证的时候,是不是用的JCIFS,如果是的话,那个弹出框是可以去掉的。这个弹出的去掉,你得自己好好的看看源码,是在那个拦截器的地方。并且不要它原来的那个拦截器,自己根据那个重新写一个,把弹出框的地方给避开。</div> <br />好的,我试试,是用JCIFS的,但是如果去了这个会不会影响域用户的认证?
问题补充:各位大哥还有没有其他解决方案,JCIFS不是非常明白 <br />城的灯大哥,能不能稍微详细点,或者有这方面文档2011年3月15日 15:49
6个答案 按时间排序 按投票排序
-
你看看我传的这个类,这个中的字段就是你需要设置的,根据你的AD服务器来设置。你写一个servlet,在这个servlet中用这个类中去跟AD服务器通信验证。至于里面的每个字段什么意思,我就不多说了,你网上搜一下资料,很多的。非常简单,就是把你的用户名和密码在这个里面设置好,然后传给AD服务器就行了。不要用它默认的那个filter。实在不懂,再给我说。
2011年3月16日 12:47
-
public class Login {
private static final String[] String = null;
private String defaultDomain;
private String domainController;
private boolean loadBalance;
private boolean enableBasic;
private boolean insecureBasic;
private String realm;
private void init() {
Config.setProperty("jcifs.smb.client.soTimeout", "1800000");
Config.setProperty("jcifs.netbios.cachePolicy", "1200");
Config.setProperty("jcifs.smb.lmCompatibility", "0");
Config.setProperty("jcifs.smb.client.useExtendedSecurity", "false");
Config.setProperty("jcifs.http.enableBasic", "true");
Config.setProperty("jcifs.smb.client.domain", "CN");
Config.setProperty("jcifs.http.domainController", "cn.域地址.com");//
defaultDomain = Config.getProperty("jcifs.smb.client.domain");
domainController = Config.getProperty("jcifs.http.domainController");
if (domainController == null) {
domainController = defaultDomain;
loadBalance = Config.getBoolean("jcifs.http.loadBalance", true);
}
enableBasic = Boolean.valueOf(
Config.getProperty("jcifs.http.enableBasic")).booleanValue();
insecureBasic = Boolean.valueOf(
Config.getProperty("jcifs.http.insecureBasic")).booleanValue();
realm = Config.getProperty("jcifs.http.basicRealm");
if (realm == null)
realm = "jCIFS";
}
public Login() {
this.init();
}
public boolean doFilter(ServletRequest request, ServletResponse response)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
NtlmPasswordAuthentication ntlm;
if ((ntlm = negotiate(req, resp, false)) == null) {
return false;
} else {
return true;
}
}
protected NtlmPasswordAuthentication negotiate(HttpServletRequest req,
HttpServletResponse resp, boolean skipAuthentication)
throws IOException, ServletException {
UniAddress dc;
String msg;
NtlmPasswordAuthentication ntlm = null;
msg = req.getHeader("Authorization");
boolean offerBasic = enableBasic && (insecureBasic || req.isSecure());
if (msg != null
&& (msg.startsWith("NTLM ") || (offerBasic && msg
.startsWith("Basic ")))) {
try {
ntlm = new NtlmPasswordAuthentication("CN", req.getParameter("username"), req.getParameter("password"));
dc = UniAddress.getByName(domainController, true);
SmbSession.logon(dc, ntlm);
} catch (SmbAuthException sae) {
if (sae.getNtStatus() == sae.NT_STATUS_ACCESS_VIOLATION) {
HttpSession ssn = req.getSession(false);
if (ssn != null) {
ssn.removeAttribute("NtlmHttpAuth");
}
}
return null;
}
req.getSession().setAttribute("NtlmHttpAuth", ntlm);
} else {
if (!skipAuthentication) {
HttpSession ssn = req.getSession(false);
String ntlmHttpAuth = (java.lang.String) ssn
.getAttribute("NtlmHttpAuth");
String uname = "CN\\" + (String) req.getParameter("username");
if (ntlmHttpAuth == null) {
if (ssn == null
|| (ntlm = (NtlmPasswordAuthentication) ssn
.getAttribute("NtlmHttpAuth")) == null) {
resp.setHeader("WWW-Authenticate", "NTLM");
if (offerBasic) {
resp.addHeader("WWW-Authenticate", "Basic realm=\""
+ realm + "\"");
}
resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
resp.setContentLength(0);
resp.flushBuffer();
return null;
}
} else {
if (!ntlmHttpAuth.equals(uname)) {
if (ssn == null
|| (ntlm = (NtlmPasswordAuthentication) ssn
.getAttribute("NtlmHttpAuth")) == null) {
resp.setHeader("WWW-Authenticate", "NTLM");
if (offerBasic) {
resp.addHeader("WWW-Authenticate",
"Basic realm=\"" + realm + "\"");
}
resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
resp.setContentLength(0);
resp.flushBuffer();
return null;
}
}
}
}
}
return ntlm;
}
}2011年3月16日 12:44
-
告诉你,兄弟,不会的!因为这个我也做过,当时为了避开那个弹出框,看了很久的源代码。不会影响你的域验证的!但是一定要自己重新写那个filter!
2011年3月16日 12:30
-
应该对你的sso登录的OA对外开发,不要只限制在域中。
如果你的域的登录也用同样帐号密码的话,完全也可以用放在这个cas上登录。
所以不要用域限制这个cas登录页面。2011年3月16日 09:28
-
首先问一个问题你进行域验证的时候,是不是用的JCIFS,如果是的话,那个弹出框是可以去掉的。这个弹出的去掉,你得自己好好的看看源码,是在那个拦截器的地方。并且不要它原来的那个拦截器,自己根据那个重新写一个,把弹出框的地方给避开。
2011年3月15日 15:49
相关推荐
sso单点登录ppt.ppt
因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。
SSO单点登录
baigo SSO单点登录系统 v3.0.1更新日志 增加数据清理功能 baigo SSO单点登录系统简介 baigo SSO 是一款基于 HTTP 协议的单点登录系统,baigo SSO 以简单为设计、开发的宗旨,安装部署简单、使用简单。baigo SSO ...
SSO(Single Sign-On)单点登录...总之,SSO单点登录为用户提供了便捷的访问体验,同时降低了管理多系统登录的复杂性。通过理解其原理和实现方式,我们可以根据具体需求选择合适的技术方案,构建高效且安全的SSO系统。
SSO(Single Sign-On)单点登录是一种网络访问控制机制...对于理解SSO单点登录解决方案,提升企业内部系统的用户体验和安全管理具有重要价值。通过深入学习这些资料,可以掌握如何设计和实施一个高效、安全的SSO系统。
SSO单点登录技术是现代企业级应用架构中不可或缺的一部分,它通过统一的身份认证服务提升了用户体验,降低了运维复杂度。"Simple-SSO"项目为开发者提供了一个学习和实践SSO的平台,结合Maven的项目管理,使得分布式...
SSO单点登录解决方案 SSO(Single Sign-On)单点登录解决方案旨在提供一个统一的身份验证入口,满足集团多个成员网站的身份验证需求。该方案的主要目标是实现单点登录,提高用户体验,降低成员网站的登录负载,并...
基于JWT实现SSO单点登录流程图解 基于JWT实现SSO单点登录流程图解是指使用JSON Web Token(JWT)来实现单点登录(SSO)的机制。在这种机制中,用户只需要登录一次,就可以访问多个应用服务器上的资源,而不需要再次...
在“sso单点登录源代码”中,我们可以看到以下几个关键组成部分: 1. **SSOLab.sln**:这是一个Visual Studio解决方案文件,包含了整个SSO项目的所有组件。通过这个文件,开发者可以打开并管理整个项目,包括各个子...
spring boot整合spring security 实现SSO单点登陆 完整DEMO. 1、配置本地hosts 127.0.0.1 sso-login 127.0.0.1 sso-resource 127.0.0.1 sso-tmall 127.0.0.1 sso-taobao windows系统的路径在C:\WINDOWS\system...
在"SSO单点登录源码"这个主题中,我们主要关注的是如何实现这样一个系统。通过提供的链接(http://www.blogjava.net/xcp/archive/2010/04/13/318125.html),我们可以了解到SSO的基本原理和实现步骤。在这个样例中,...
"CAS实现sso单点登录原理" CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于Web SSO)。CAS开始于2001年,并在2004年12月...
以上是SSO单点登录在Java环境中的主要技术和知识点,理解并掌握这些内容,有助于构建高效且安全的多系统登录解决方案。对于各应用独立用户库的情况,可以通过用户同步、联合身份或联邦身份管理等方式来实现。在具体...
redmine本身没有提供单点登录功能,这个插件可以提供redmine的单点登录。解压后将这两个文件放置在redmine目录的plugins目录中。具体操作参照README.md。每个解压文件中都有个EADME.md
这个“sso单点登录demo”是一个Java实现的示例,包含了三种不同的场景:相同域名、相同父类域名以及不同域名的SSO解决方案。 1. **相同域名的SSO** (`sso_same_domain`): 在同一域名下实现SSO,通常比较直接,因为...