0 0

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个答案 按时间排序 按投票排序

0 0

你看看我传的这个类,这个中的字段就是你需要设置的,根据你的AD服务器来设置。你写一个servlet,在这个servlet中用这个类中去跟AD服务器通信验证。至于里面的每个字段什么意思,我就不多说了,你网上搜一下资料,很多的。非常简单,就是把你的用户名和密码在这个里面设置好,然后传给AD服务器就行了。不要用它默认的那个filter。实在不懂,再给我说。

2011年3月16日 12:47
0 0

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
0 0

告诉你,兄弟,不会的!因为这个我也做过,当时为了避开那个弹出框,看了很久的源代码。不会影响你的域验证的!但是一定要自己重新写那个filter!

2011年3月16日 12:30
0 0

应该对你的sso登录的OA对外开发,不要只限制在域中。
如果你的域的登录也用同样帐号密码的话,完全也可以用放在这个cas上登录。
所以不要用域限制这个cas登录页面。

2011年3月16日 09:28
0 0

首先问一个问题你进行域验证的时候,是不是用的JCIFS,如果是的话,那个弹出框是可以去掉的。这个弹出的去掉,你得自己好好的看看源码,是在那个拦截器的地方。并且不要它原来的那个拦截器,自己根据那个重新写一个,把弹出框的地方给避开。

2011年3月15日 15:49
0 0

我有个问题:我在我的应用 系统index.jsp中iframe了3个页面,感觉有些时候我的提交参数丢失了。

2011年3月15日 15:49

相关推荐

    sso单点登录ppt.ppt

    sso单点登录ppt.ppt

    PHP 使用TP5.0 实现SSO单点登录

    因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。

    SSO单点登录

    SSO单点登录

    baigo SSO单点登录系统 v3.0.1.zip

    baigo SSO单点登录系统 v3.0.1更新日志 增加数据清理功能 baigo SSO单点登录系统简介 baigo SSO 是一款基于 HTTP 协议的单点登录系统,baigo SSO 以简单为设计、开发的宗旨,安装部署简单、使用简单。baigo SSO ...

    关于SSO单点登录的简单实现

    SSO(Single Sign-On)单点登录...总之,SSO单点登录为用户提供了便捷的访问体验,同时降低了管理多系统登录的复杂性。通过理解其原理和实现方式,我们可以根据具体需求选择合适的技术方案,构建高效且安全的SSO系统。

    SSO单点登录解决方案

    SSO(Single Sign-On)单点登录是一种网络访问控制机制...对于理解SSO单点登录解决方案,提升企业内部系统的用户体验和安全管理具有重要价值。通过深入学习这些资料,可以掌握如何设计和实施一个高效、安全的SSO系统。

    sso单点登录

    SSO单点登录技术是现代企业级应用架构中不可或缺的一部分,它通过统一的身份认证服务提升了用户体验,降低了运维复杂度。"Simple-SSO"项目为开发者提供了一个学习和实践SSO的平台,结合Maven的项目管理,使得分布式...

    SSO单点登陆解决方案

    SSO单点登录解决方案 SSO(Single Sign-On)单点登录解决方案旨在提供一个统一的身份验证入口,满足集团多个成员网站的身份验证需求。该方案的主要目标是实现单点登录,提高用户体验,降低成员网站的登录负载,并...

    基于JWT实现SSO单点登录流程图解

    基于JWT实现SSO单点登录流程图解 基于JWT实现SSO单点登录流程图解是指使用JSON Web Token(JWT)来实现单点登录(SSO)的机制。在这种机制中,用户只需要登录一次,就可以访问多个应用服务器上的资源,而不需要再次...

    sso单点登录源代码

    在“sso单点登录源代码”中,我们可以看到以下几个关键组成部分: 1. **SSOLab.sln**:这是一个Visual Studio解决方案文件,包含了整个SSO项目的所有组件。通过这个文件,开发者可以打开并管理整个项目,包括各个子...

    spring boot 实现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单点登录源码

    在"SSO单点登录源码"这个主题中,我们主要关注的是如何实现这样一个系统。通过提供的链接(http://www.blogjava.net/xcp/archive/2010/04/13/318125.html),我们可以了解到SSO的基本原理和实现步骤。在这个样例中,...

    CAS实现sso单点登录原理

    "CAS实现sso单点登录原理" CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于Web SSO)。CAS开始于2001年,并在2004年12月...

    SSO 单点登录(java)

    以上是SSO单点登录在Java环境中的主要技术和知识点,理解并掌握这些内容,有助于构建高效且安全的多系统登录解决方案。对于各应用独立用户库的情况,可以通过用户同步、联合身份或联邦身份管理等方式来实现。在具体...

    redmine配置sso单点登录插件

    redmine本身没有提供单点登录功能,这个插件可以提供redmine的单点登录。解压后将这两个文件放置在redmine目录的plugins目录中。具体操作参照README.md。每个解压文件中都有个EADME.md

    sso单点登录demo

    这个“sso单点登录demo”是一个Java实现的示例,包含了三种不同的场景:相同域名、相同父类域名以及不同域名的SSO解决方案。 1. **相同域名的SSO** (`sso_same_domain`): 在同一域名下实现SSO,通常比较直接,因为...

Global site tag (gtag.js) - Google Analytics