扩展 jaas 实现类实例级授权

“java 认证和授权服务”(java authentication and
authorization service,jaas) 在 jaas 下,可以给予用户或服务特定的许可权来执行 java 类
中的代码。在本文中,软件工程师 carlos fonseca 向您展示如何为
企业扩展 jaas 框架。向 jaas 框架添加类实例级授权和特定关系使
您能够构建更动态、更灵活并且伸缩性更好的企业应用程序。
大多数 java 应用程序都需要某种类实例级的访问控制。例如,
基于 web 的、自我服务的拍卖应用程序的规范可能有下列要求:
public static object
doas(subject subject, java.security.privilegedaction
action)
throws java.security.privilegedactionexception
注意,用来保护敏感代码的方法与“java 2 代码源访问控制”
(java 2 codesource aess control)概述中描述的方法相同。请参
阅参考资料部分以了解更多关于 jaas 中代码源访问控制和认证的
信息。
jaas 中的授权
清单 4 显示一个授权请求的结果,该请求使用清单 3 中显示的
jaas 策略文件。假设已经安装了 securitymanager,并且
logincontext 已经认证了一个带有名为“admin”
的 .ibm.resource.security.auth.principalexample 主体的
subject。
清单 4. 一个简单的授权请求
public class jaasexample { public static void main(string[] args) {
...
// where authenticateduser is a subject with
// a principalexample named admin.
subject.doas(authenticateduser, new jaasexampleaction());
...
}
}
public class jaasexampleaction implements privilegedaction
{
public object run() {
filewriter fw = new filewriter("hi.txt");
fw.write("hello, world!");
fw.close();
}
}
这里,敏感代码被封装在 jaasexampleaction 类中。还要注意,
调用类不要求为 jaasexampleaction 类代码源授予许可权,因为它
实现了一个 privilegedaction。
扩展 jaas
大多数应用程序都有定制逻辑,它授权用户不仅仅在类上执行操
作,而且还在该类的实例上执行操作。这种授权通常建立在用户和实 例之间的关系上。这是 jaas 的一个小缺点。然而,幸运的是,这样
设计 jaas 使得 jaas 可以扩展。只要做一点工作,我们将可以扩展
jaas,使其包含一个通用的、类实例级的授权框架。
在文章开头处我已经说明了,抽象类
javax.security.auth.policy 被用于代表 jaas 安全性策略。它的
缺省实现是由 .sun.security.auth.policyfile 类提供。
policyfile 类从 jaas 格式的文件(象清单 3 中显示的那个一样)
中读取策略。
我们需要向这个文件添加一个东西为类实例级授权扩展策略定义:
一个与许可权语句相关的可选关系参数。
缺省 jaas 许可权语句的格式如下:
permission ; [name], [actions];
我们在这个许可权语句的末尾添加一个可选的关系参数来完成策
略定义。下面是新许可权语句的格式:
permission ;
[name], [actions], [relationship];
在为类实例级授权扩展 jaas 时要注意的最重要的一点是:许可
权实现类必须有一个带三个参数的构造函数。第一个参数是名称参数,
第二个是行为参数,最后一个是关系参数。
解析新文件格式
既然文件格式已经改变,就需要一个新的
javax.security.auth.policy 子类来解析文件。 为简单起见,我们的示例使用了一个新的
javax.security.auth.policy 子
类 .ibm.resource.security.auth.xmlpolicyfile,来从 xml 文件
读取策略。在实际的企业应用程序中,关系数据库更适合执行这个任
务。
使用 xmlpolicyfile 类代替缺省的 jaas 访问控制策略实现的
最容易的方法是向 java.security 属性文件添加
auth.policy.provider=.ibm.resource.security.auth.xmlpolicyf
ile 条目。java.security 属性文件位于 java 2 平台运行时的
lib/security 目录下。清单 5 是与 xmlpolicyfile 类一起使用的
样本 xml 策略文件:
清单 5. 一个 xml 策略文件
;
;
;
".ibm.resource.security.auth.principalexample"
name="users">;
".ibm.resource.security.auth.resourcepermission"
name=".ibm.security.sample.auction"
actions="create" />;
".ibm.resource.security.auth.resourcepermission"
name=".ibm.security.sample.auction"
actions="read" />;
".ibm.resource.security.auth.resourcepermission"
name=".ibm.security.sample.auction"
actions="write"
relationship="owner" />;
".ibm.resource.security.auth.resourcepermission"
name=".ibm.security.sample.bid"
actions="create" />;
".ibm.resource.security.auth.resourcepermission"
name=".ibm.security.sample.bid"
actions="read" />;
".ibm.resource.security.auth.resourcepermission"
name=".ibm.security.sample.bid"
actions="write"
relationship="owner" />;
".ibm.resource.security.auth.resourcepermission"
name=".ibm.security.sample.bid"
actions="aept"
relationship="actionowner" />;
;
;
;
在这个示例策略文件中,任何与名为 principalexample 的用户
有关的用户(subject)都可以创建并读取一个 auction.class 实例。
但是,只有创建该实例的用户才可以更新(写)它。这是第三个
permission 元素定义的,该元素包含值为 owner 的 relationship
属性。bid.class 实例也是一样,除了相应 auction.class 实例的
所有者可以更改投标接受标志。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hhappy0123456789

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值