标签: jaas

使用j_security_check在Java EE/JSF中执行用户身份验证

我想知道当前的方法是关于使用JSF 2.0(如果存在任何组件)和Java EE 6核心机制(登录/检查权限/注销)的Web应用程序的用户身份验证,其中包含用户信息保存在JPA中实体.Oracle Java EE教程在这方面有点稀疏(仅处理servlet).

没有使用整个其他框架,如Spring-Security(acegi)或Seam,但如果可能的话,试图用新的Java EE 6平台(Web配置文件).

authentication jsf jaas j-security-check java-ee

155
推荐指数
3
解决办法
14万
查看次数

JAAS为人类服务

我很难理解JAAS.这一切似乎都应该比它应该更复杂(尤其是Sun教程).我需要一个简单的教程或示例,介绍如何在基于Struts + Spring + Hibernate和自定义用户存储库的Java应用程序中实现安全性(身份验证+授权).可以使用ACEGI实现.

java security spring spring-security jaas

81
推荐指数
4
解决办法
3万
查看次数

如何将JAAS授权检查委托给Shiro?

我正在开发一个需要基于对象的身份验证和授权的服务器端应用程序.我喜欢Shiro的简单性,但为了与JAAS兼容,我编写了一个使用Apache Shiro作为底层机制的LoginModule.

但我的问题是我找不到将JAAS授权检查委托给Shiro的方法.我怎样才能做到这一点?

java authentication authorization jaas shiro

64
推荐指数
1
解决办法
2661
查看次数

使用Mockito,如何拦截void方法上的回调对象?

我正在使用mockito来测试遗留的JAAS/LDAP登录模块.

javax.security.auth.callback.CallbackHandler接口定义了功能:

void handle(javax.security.auth.callback.Callback[] callbacks)
Run Code Online (Sandbox Code Playgroud)

我期待callbacks包含一个NameCallback,这是需要操纵以通过测试的对象.

有没有办法有效地模拟这个,或者我会更好地使用存根实现CallbackHandler

java unit-testing callback jaas mockito

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

绕过JConsole对用户名/密码的要求 - 当使用带有JMX的Jaas自定义登录模块来处理授权和身份验证时

我正在使用JConsole访问正在运行的MBean.

MBean使用自定义Jaas登录模块,并使用以下命令运行:

java -classpath UserLGUGroupHandlingApplication.jar;MBeanSecure.jar 
-com.sun.management.jmxremote.login.config=management.properties 
-Djava.security.auth.login.config=./sample_jaas.config 
com.test.running.RunningImplementation
Run Code Online (Sandbox Code Playgroud)

management.properties文件看起来像这样:

com.sun.management.jmxremote.access.file=jmxremote.access
com.sun.management.jmxremote=true
com.sun.management.jmxremote.authenticate=true
com.sun.management.jmxremote.port=1234
com.sun.management.jmxremote.login.config=Sample
com.sun.management.jmxremote.ssl=false
com.sun.management.jmxremote.ssl.need.client.auth=false
Run Code Online (Sandbox Code Playgroud)

和sample_jaas.config:

Sample {
   test.module.AETTLoginModule required debug=true;
};
Run Code Online (Sandbox Code Playgroud)

然后,用户将通过命令行中的JConsole登录来访问此运行进程.

jconsole -debug //or just jconsole
Run Code Online (Sandbox Code Playgroud)

用户选择"远程连接",使用RemoteProcess'localhost:1234'

loginmodule根据当前登录到Windows的用户处理用户验证和主体设置,用于查询单独的授权逻辑以确定访问级别.

我想要发生什么:

  1. 用户将jconsole输入cmd
  2. jconsole窗口打开.
  3. 用户输入进程地址,例如"localhost:1234"
  4. 用户输入用户名或密码(因为授权由自定义jaas登录模块处理,因此不需要).
  5. 模块确定用户是否具有readwrite,readonly或no access.
  6. 进程的Jconsole窗口打开,或登录失败.

问题:

要在jconsole窗口中访问jmx进程,我必须输入一个虚拟用户名和密码,例如U:a,P:a,否则我收到以下错误:

java.lang.SecurityException: Authentication failed! Credentials required
    at com.sun.jmx.remote.security.JMXPluggableAuthenticator.authenticationFailure(JMXPluggableAuthenticator.java:193)
    at com.sun.jmx.remote.security.JMXPluggableAuthenticator.authenticate(JMXPluggableAuthenticator.java:145)
    at sun.management.jmxremote.ConnectorBootstrap$AccessFileCheckerAuthenticator.authenticate(ConnectorBootstrap.java:201)
    at javax.management.remote.rmi.RMIServerImpl.doNewClient(RMIServerImpl.java:213)
    at javax.management.remote.rmi.RMIServerImpl.newClient(RMIServerImpl.java:180)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) …
Run Code Online (Sandbox Code Playgroud)

java jmx login jconsole jaas

23
推荐指数
1
解决办法
3384
查看次数

软件开发人员没有外部授权的原因吗?

外部化身份的价值主张开始增加,许多网站现在接受OpenID,CardSpace或联合身份.但是,许多开发人员还没有采取下一步来外部化基于XACML的授权和使用方法.

是缺乏意识或其他原因的原因?您希望如何了解基于XACML的软件开发方法?

请注意,我询问授权,而不是身份验证.

.net c# java security jaas

20
推荐指数
2
解决办法
1040
查看次数

何时从Container托管安全转移到Apache Shiro,Spring Security等替代方案?

我正在尝试保护使用JSF2.0构建的应用程序.

我很困惑人们什么时候选择使用像Shiro,Spring Security或owasp的esapi这样的安全替代品来留下容器管理的安全性.看过Stack Overflow上的一些相关问题后,我意识到JSF开发人员过去更喜欢基于容器的安全性.但我也强烈建议使用Apache Shiro.我是安全问题的新手,不知道可能是什么相关问题以及如何处理它们.因此,我正在寻找通过其默认设置/自己处理大多数安全问题的东西.

就我的应用程序需求而言,我有一个社交应用程序,具有不同角色的用户可以访问不同的页面集,并可以根据他们的角色在这些页面上使用不同级别的功能.

在那种情况下,您认为对我来说可能是一个很好的选择吗?

我个人已经确信选择Shiro,因为它易于使用并且为新手照顾大部分事情.

java security jsf jaas shiro

19
推荐指数
2
解决办法
9320
查看次数

Java和Kerberos身份验证krb5.conf与System.setProperty的对比

请帮我解决kerberos + Java问题.我有一个简单的Java程序,可以使用Kerberos对Windows Active Directory进行身份验证.以下java代码工作正常没有任何问题,并打印真实 -

public class KerberosAuthenticator {
    public static void main(String[] args) {
        String jaasConfigFilePath = "/myDir/jaas.conf";

        System.setProperty("java.security.auth.login.config", jaasConfigFilePath);

        System.setProperty("java.security.krb5.realm", "ENG.TEST.COM");
        System.setProperty("java.security.krb5.kdc","winsvr2003r2.eng.test.com");

        boolean success = auth.KerberosAuthenticator.authenticate("testprincipal", "testpass");

        System.out.println(success);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我指定krb5.conf文件的路径而不是手动指定领域和kdc时,它会错误地说"Null领域名称(601) - 未指定默认领域".以下是代码 -

public class KerberosAuthenticator {
    public static void main(String[] args) {
        String jaasConfigFilePath = "/myDir/jaas.conf";

        System.setProperty("java.security.auth.login.config", jaasConfigFilePath);

        String krb5ConfigFilePath = "/etc/krb5/krb5.conf";
        System.setProperty("java.security.krb5.conf", krb5ConfigFilePath);

        boolean success = auth.KerberosAuthenticator.authenticate("testprincipal", "testpass");

        System.out.println(success);
    }
}
Run Code Online (Sandbox Code Playgroud)

krb5.conf的内容如下 -

[libdefault]
 default_realm = ENG.TEST.COM

[realms]
 ENG.TEST.COM = {
  kdc = winsvr2003r2.eng.test.com …
Run Code Online (Sandbox Code Playgroud)

java kerberos jaas

18
推荐指数
1
解决办法
3万
查看次数

Glassfish 3.1默认主体到角色映射

我正在使用glassfish和jaas模块.

我以这种方式配置了我的web.xml.

<security-constraint>
    <web-resource-collection>
        <web-resource-name>ALL Page for admin</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>file</realm-name>
</login-config>
<security-role>
    <description>Administrator</description>
    <role-name>user</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud)

这意味着所有想要访问我的Web应用程序的用户都需要是组用户.

然后在glassfish控制台上我需要勾选选项:Configuration - > server-config - > security - > Default Principal To Role Mapping

我的问题是为什么我需要将此默认主体勾选到角色映射?我如何更改我的web.xml以避免勾选它?

非常感谢

卢瓦克

java glassfish jaas java-ee

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

如何在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万
查看次数