安全上下文基础-User,Subject和Principal

2023/07/02

1. 概述

安全性是任何Java应用程序的基本组成部分,我们可以找到许多可以处理安全问题的安全框架。此外,我们在这些框架中通常使用一些术语,如主题(Subject)、主体(Principal)和用户(User)。

在本教程中,我们将解释安全框架的这些基本概念。此外,我们将展示它们的关系和差异。

2. 主题

在安全上下文中,主题表示请求的来源。主题是获取有关资源的信息或修改资源的实体。此外,主体还可以是用户、程序、进程、文件、计算机、数据库等。

例如,一个人需要授权访问资源和应用程序以验证请求源。在这种情况下,这个人是一个主题。

让我们看一下基于JAAS框架实现的示例:

Subject subject = loginContext.getSubject();
PrivilegedAction privilegedAction = new ResourceAction();
Subject.doAsPrivileged(subject, privilegedAction, null);

3. 主体

身份验证成功后,我们有一个填充主体,其中包含许多关联身份,例如角色、社会安全号码(SSN)等。换句话说,这些标识符是主体,主体代表他们。

例如,一个人可能有一个帐号主体(“87654-3210”)和其他唯一标识符,以区别于其他主体。

让我们看看如何在成功登录后创建一个UserPrincipal并将其添加到一个Subject中:

@Override
public boolean commit() throws LoginException {
    if (!loginSucceeded) {
        return false;
    }
    userPrincipal = new UserPrincipal(username);
    subject.getPrincipals().add(userPrincipal);
    return true;
}

4. 用户

通常,用户代表访问资源以执行某些操作或完成工作任务的人。

此外,我们可以将用户用作主体,另一方面,主体是分配给用户的身份。UserPrincipal是上一节中讨论的JAAS框架中用户的一个很好的例子。

5. 主题、主体、用户的区别

正如我们在上面的部分中看到的,我们可以使用主体来表示同一用户身份的不同方面。它们是主题的子集,而用户是指最终用户或交互操作员的主体的子集。

6. 总结

在本教程中,我们讨论了主题、主体和用户的定义,它们在大多数安全框架中都很常见。此外,我们展示了它们之间的区别。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章