标签: jaas

如何在Java中针对服务器验证Kerberos票证?

我们正在使用JAAS在使用Windows Kerberos票证缓存的Java应用程序中启用单点登录.我们的jaas.conf配置文件如下所示:

LoginJaas {
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=true
  doNotPrompt=true
  debug=true;
};
Run Code Online (Sandbox Code Playgroud)

有了这个,我们可以创建一个Jaas LoginContext并成功获取用户的Kerberos票证.我们使用JMI将此票证发送到服务器应用程序.我们无法做的是在服务器上验证Kerberos票证实际上是由我们的Active Directory创建的.

目前,我们通过简单检查服务器主体(KerberosTicket.getServer())名称是否在领域部分中具有我们的域名来对票证进行非常不安全的验证.但是,当然,任何人都可以使用相同的域名设置自己的Kerberos服务器,并使用该票证来启动应用程序.

我发现的一个想法是使用Kerberos票证对Active Directory LDAP进行身份验证.遗憾的是,我们使用Windows 7并重新使用Kerberos票证对LDAP进行身份验证仅在设置注册表项时有效(请参阅http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss /tutorials/Troubleshooting.html,搜索allowtgtsessionkey).这对我们的用户来说是不可接受的.

有没有办法根据我们的Active Directory服务器验证票证?我怀疑有办法检查KerberosTicket.getServer()票证是否等于我们服务器的票证,但我不知道该怎么做.更新:KerberosTicket().getServer()仅返回KerberosPrincipal,它只包含服务器票证名称和域,因此不适合验证.

感谢您的帮助,memminger

java kerberos active-directory jaas single-sign-on

16
推荐指数
2
解决办法
1万
查看次数

JSF身份验证和授权

为JSF Web应用程序实现身份验证和授权的最佳方法是什么?我还是希望使用基于容器的安全性,因为我需要调用需要主体的EJB.

我意识到基于表单的身份验证是与JSF的一次重大斗争,但是我可以使用PhaseListener或类似的程序登录来验证用户吗?

我还应该看看其他任何方法吗?

java authentication jsf authorization jaas

14
推荐指数
1
解决办法
2万
查看次数

了解Java Application Server中的身份验证

我目前正在研究在JBoss AS 7上运行的项目,该项目需要来自各种来源的身份验证.我试图了解组合提供身份验证的各种组件.

关于这一切如何融合,我有一些假设/猜测,但我需要确保我的理解是正确的.以下是我所理解的JBoss AS7的身份验证过程.


您有一个安全领域,用于定义用户的身份验证方式.然后,这个领域会暴露给您的应用程序,以保护其中的部分或全部内容.在AS7中,这是在<subsystem xmlns ="urn:jboss:domain:security:1.0">元素中配置的.

可以将域配置为使用登录模块(例如数据库,LDAP,本地文件或其他内容)针对各种源对用户进行身份验证.可以定义多个登录模块,您可以指定登录模块的某些组合必须"成功"才能进行身份验证.

实际的用户名和密码通过web.xml文件(对于servlet)中定义的机制传递,该机制在<login-config>元素中定义.


假设上述过程是正确的(可能不是):

  • 整个身份验证过程是否属于JAAS之类的规范,或者JAAS只是此过程的一小部分或可选部分?
  • 所有类型的<auth-methods>(即BASIC,DIGEST和FORM)是否适用于各种登录模块?这个页面似乎没有提示,但我没有看到任何与<login-module> options <login-config>选项匹配的明确文档.
  • 从登录配置到登录模块的用户名和密码流似乎很直接,但是对于像OpenID或OAuth这样的系统会发生什么呢?还有中间步骤(比如重定向到外部登录页面)?
  • Seam 3 Security,Apache ShiroSpring Security等项目如何适应这种情况?

spring-security jaas shiro seam3 jboss7.x

14
推荐指数
1
解决办法
4197
查看次数

Java EE安全性:JASPIC/JAAS还是应用安全框架?(Glassfish 3)

我目前正在使用Oracle ADF(这是一个端到端的Java EE框架)来构建我的Web应用程序和GlassFish 3.1作为应用程序服务器.

后者支持JAAS(在其管理控制台中声明).因此,我创建了一个安全领域,并使用配置文件中声明的角色映射它们,并使用JAAS实现授权和身份验证安全功能.一切都很好,直到现在!在过去的几周里,我一直在研究Java EE安全性.

我发现如果你坚持使用"基本"安全性,那么JAAS就足够了.此外,似乎JAAS(作为Java安全框架的一部分)仅适用于Java SE(但由于Java EE是基于Java SE构建的,因此其中一些模块正在被重用,例如LoginMethod和Callbacks).

然后,我发现很多关于JASPIC的帖子,发现它只能通过编程方式实现(不是问题),并且它还没有被app服务器供应商完全支持,并试图在两者之间进行比较.即使JASPIC1.1版本已经解决了一些问题,例如:

但是,容器不会完全记住身份验证.在每个请求仍然调用SAM,并且SAM仍然必须重新进行身份验证

(这对我来说听起来不太好).

然后,我继续寻找集成一些安全框架.最着名的似乎是"春天""四郎".当然,他们每个人都有自己的特点(可能第一个更适合特定情况,而第二个更适合另一个).对我来说更重要的是:

  • 认证
  • 授权
  • 会话管理(可能还有加密)

但是,到处都发现了相互矛盾的结论.结果:在搜索之前我现在更加困惑.

我只是安全等主题的新手,而且我是一名开发人员(我有实施的东西),因此很难及时了解每一个新版本,安全方面的进展似乎每天都在继续.

如果可能的话,我想根据个人经验得出一些事实.每个提示或建议都表示赞赏.我想确保在采取实施步骤之前我有信心.

java security jaas glassfish-3 jaspic

14
推荐指数
1
解决办法
2121
查看次数

简单来说,有人可以向我解释JAAS,JACC和JASPIC之间的区别吗?

我会说实话.我一直是开发人员已经有一段时间了,但这是我第一次听说JACC和JASPIC.我知道它们是授权提供商使用的标准,但它们与JAAS有何不同?我们何时会使用一个而不是另一个?

我做了一些初步的研究,并不是说我很懒.只是关于JACC和JASPIC的阅读文章有点让我不知所措,我需要在短时间内了解这一点,因为我需要在我即将开展的一个项目中实现这一点.只是在我对它的理解上寻找一个快速的开始.

jaas java-ee java-ee-6 jaspic jacc

14
推荐指数
1
解决办法
1830
查看次数

Java Web应用程序:使用自定义领域

我正在编写一个需要通过webservice登录的java Web应用程序.当然,我使用的应用程序服务器(glassfish v2)提供的领域都不能解决问题.因此,我必须自己写.但是,我写的领域实现似乎完全依赖于glassfish,不能像任何其他应用程序服务器那样使用.

是否有任何标准或广泛支持的方式来实现自定义Realm?是以任何方式从.war部署该领域,还是总是需要从服务器自己的类路径加载?

authentication jaas java-ee jaspic

13
推荐指数
2
解决办法
7775
查看次数

如何使用基于表单的安全性显示登录用户,JSF 2.0应用程序

我使用自定义Realm在GlassFish 3服务器上的JSF 2.0应用程序中配置了基于表单的登录.获取有关已登录用户的信息的最简单方法是什么,即用户名.

这可能吗?或者当前会话是否与安全角色相关联?如果是这样,是否有一些方法可以在不更改登录配置的情况下实现此目的?

简单地说,我想要的是显示一个简单的消息,如:

以用户名登录

在我的网页上.

security jaas java-ee jsf-2

13
推荐指数
2
解决办法
2万
查看次数

为什么我要使用JAAS来防止手写安全?

我有手写的安全性,简单的servlet过滤器,它将未经授权的用户重定向到他们的登录页面.登录控制器在成功验证或其主页面后将它们重定向到请求的URL.这种方法工作正常,唯一的缺点是,我必须通过堆栈跟踪将存储在HttpSession中的User对象传递给EJB bean.

现在我重写了一些代码并使用Spring-security作为基于http的身份验证.它与Glassfish JAAS自动集成.

我不再需要通过stacktrace传递User,调用sessionContext.getCallerPrincipal()就足够了.但是主要对象只返回userName,而不是userId,所以如果我需要userId,我必须执行加法选择.

1)无论如何都有扩展Principal对象,所以它可以存储更多属性?

2)为什么我应该使用JAAS或Spring Security或其他安全框架,为什么不只是手写servlet过滤器?

java security jaas java-ee

13
推荐指数
1
解决办法
4254
查看次数

web.xml中的安全性约束,用于没有角色成员身份的已认证用户

我非常绝望,因为我认为必须有一个简单的解决方案来解决我的问题,但我正在寻找 - 无济于事.

我在Glassfish 3.1.1中使用自定义域.此自定义领域(实现AppservPasswordLoginModuleInterface)从HTTPS请求中获取安全令牌,验证安全令牌,然后将用户返回到Glassfish.

问题是安全令牌不包含任何组,这意味着方法public String [] getGroupsList()或自定义域返回一个空列表(正确,因为安全令牌中没有角色).

也就是说,我希望有一个安全约束,只有经过验证的用户才能登录.我知道我可以在web.xml中使用以下约束:

<security-constraint>
  <web-resource-collection>
    <web-resource-name>mywebapp</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>Users</role-name>
  </auth-constraint>
</security-constraint>
Run Code Online (Sandbox Code Playgroud)

但是因为我没有任何组,所以我无法将任何组映射到角色,因此我不能将auth-constraint与role-name一起使用.

在web.xml中是否有一种方法可以定义只允许经过身份验证的用户,忽略它们所处的角色并忽略它们是否处于任何角色.

有几个我无法实现的解决方案:

  • 我无法将底层LDAP更改为包含角色,因为LDAP模式以及LDAP用户映射到安全性的方式会使我们超出范围.
  • 我必须使用当前的自定义域处理程序,我不能用我自己的一个只替换默认组替换它.我曾经尝试过这次,但它确实奏效了.但是我无法用自己的自定义域替换现有的自​​定义域,因为自定义域应该是通用的.

但我真的认为web.xml中应该有一种方法可以说:忽略所有组和角色,我只想要一个经过身份验证的用户?

任何帮助,将不胜感激.

java web.xml glassfish jaas

12
推荐指数
2
解决办法
1万
查看次数

Kafka"未在JAAS配置中指定登录模块"

我使用控制台脚本与使用sasl保护的Kafka进行通信时遇到问题.Kafka用sasl保护,监听器是SASL_PLAINTEXT,机制是PLAIN.

我做了什么:我尝试使用一个kafka脚本列出一些数据:

bin/kafka-consumer-groups.sh --bootstrap-server(address)--list

但是我得到" WARN Bootstrap broker(地址)已断开连接(org.apache.kafka.clients.NetworkClient) "并且命令失败,这是可以理解的,因为它是用sasl保护的.

所以我尝试了如何在该命令中添加客户端用户名/密码.首先,我尝试运行kafka-console-consumer脚本,我使用--command-config添加必要的文件.我很快发现我不能直接添加jaas文件,我需要使用.properties文件,所以我做到了.

我的属性文件(请记住括号表示"删失"数据,我不能在这里放置所有真实数据):

bin/kafka-consumer-groups.sh --bootstrap-server (address) --list
Run Code Online (Sandbox Code Playgroud)

我的jaas文件:

WARN Bootstrap broker (address) disconnected (org.apache.kafka.clients.NetworkClient)
Run Code Online (Sandbox Code Playgroud)

这个jaas文件适用于我的标准java应用程序.

但是,当我尝试运行kafka-consumer-groups脚本或kafka-console-consumer时,我收到此错误:

bootstrap.servers=(address)
zookeeper.connect=127.0.0.1:2181
zookeeper.connection.timeout.ms=6000
sasl.jaas.config=(path)/consumer_jaas.conf
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
group.id=(group)
Run Code Online (Sandbox Code Playgroud)

这个jaas文件是我在java应用程序中使用的文件的直接副本,它与kafka通信并且它可以工作,但是在这里,使用控制台工具,它只是不起作用.我试着寻找解决方案,但我找不到任何有用的东西.

谁能帮我这个?

java sasl jaas apache-kafka

12
推荐指数
1
解决办法
2万
查看次数