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 会抛出类似“推送被拒绝,未经授权的访问”这样的错误。 [关闭]

IIS 下载文件 报错“401 - 未授权: 由于凭据无效,访问被拒绝。”

无法显示网页,错误代码:500 这是怎么回事?应该怎么办?

拒绝访问:未经授权的ExCeption

Ldap 用户授权失败 - 未处理的 Spring 身份验证“访问被拒绝”