JAAS 授权中的访问被拒绝
Posted
技术标签:
【中文标题】JAAS 授权中的访问被拒绝【英文标题】:Access denied in JAAS authorisation 【发布时间】:2014-03-05 05:30:43 【问题描述】:我正在设计一个 JAAS 身份验证和授权应用程序。在身份验证部分,用户输入的用户名和密码与从数据库中检索到的值进行匹配。每个用户有三个主体(用户名、密码、职位) .成功认证后,主体被添加到主题中。这部分工作正常。
问题出在授权部分(当我设置 SecurityManager 时),根据职位(经理或员工)授予权限。
政策文件是
grant codebase "/home/esamsar/NetBeansProjects/JAAS/*"
permission javax.security.auth.AuthPermission "createLoginContext.Sample";
permission javax.security.auth.AuthPermission "doAsPrivileged";
grant Principal PositionPrincipal "manager"
permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "user.home", "read,write";
permission java.io.FilePermission "topsecurity.txt", "read";
;
grant Principal PositionPrincipal "employee"
permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "user.home", "read,write";
;
添加以下代码行后,我遇到“无法创建 LoginContext。访问被拒绝(“java.util.PropertyPermission”“java.security.auth.login.config”“write”)”
System.setSecurityManager(new SecurityManager());
System.setProperty("java.security.auth.login.config", configFile);
System.setProperty( "java.security.policy", policyFile );
configFile 和policyFile 分别是jaas 配置文件和策略文件。 我可以在我的策略文件中添加什么来解决问题。提前致谢。
【问题讨论】:
当我在设置系统属性后最后设置安全管理器时遇到不同的错误“无法创建 LoginContext。访问被拒绝(“java.util.PropertyPermission”“user.dir”“read”) " System.setProperty("java.security.auth.login.config", 路径); System.setProperty(“java.security.policy”,策略); System.setSecurityManager(new SecurityManager()); 我在策略文件中授予了更多权限,现在没有错误。我正在使用 JDBC 连接数据库。我还没有授予 SQLPermission。将应用程序连接到数据库的代码是在没有任何 SecurityException 的情况下静默跳过。 【参考方案1】:你需要先写:
System.setProperty("java.security.auth.login.config", configFile);
System.setProperty( "java.security.policy", policyFile );
只有这样:
System.setSecurityManager(new SecurityManager());
但这可能不仅仅是问题。我有同样的问题,我解决了。我有工作示例,但使用 unix auth。这里是: 主类:
public class UserAuthLesson
public static void main(String[] args)
try
System.setProperty("java.security.policy", "src/MyApp.policy");
System.setProperty("java.security.auth.login.config", "src/jaas.config");
System.setSecurityManager(new SecurityManager());
LoginContext context = new LoginContext("Login1"); // defined in JAAS configuration file
context.login();
Subject subject = context.getSubject();
context.logout();
catch (LoginException exception) // thrown if login was not successful
exception.printStackTrace();
政策文件:
grant
permission javax.security.auth.AuthPermission "createLoginContext.Login1";
permission javax.security.auth.AuthPermission "doAsPrivileged";
;
grant principal com.sun.security.auth.UnixPrincipal "max"
permission java.util.PropertyPermission "user.*", "read";
;
Jaas 文件:
Login1
com.sun.security.auth.module.UnixLoginModule required;
;
【讨论】:
以上是关于JAAS 授权中的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
未经授权的访问异常 - 在C#中将文件复制到其他目录时访问被拒绝的路径
Heroku 会抛出类似“推送被拒绝,未经授权的访问”这样的错误。 [关闭]