美文网首页
jaas 认证过程说明

jaas 认证过程说明

作者: 后知不觉1 | 来源:发表于2023-05-06 22:44 被阅读0次

1、jaas auth认证

jaas auth认证是一个固定的执行过程,我们在其中可以自定义认证过程

2、认证过程

image.png

如上图所示,JAAS 认证过程分如下几个步骤:

1. 实例化一个 javax.security.auth.login.LoginContext 对象,它负责协调认证过程。该过程可用如下代码描述:

LoginContext lc = new LoginContext(name, new CallbackHandler());

  • name 指向安全配置文件(jaas.config)中 loginModule 的名字
  • CallbackHandler 用于处理 loginModule 传入的 callbacks

2. LoginContext 获取安全配置文件(jaas.config),实例化 Configuration 对象。也可自定义继承方法javax.security.auth.login.Configuration 重写getConfiguration 或者 getAppConfigurationEntry 方法,在新建LoginContext作为参数传入

比如hadoop 的UserInformationGroup

static void loginUserFromSubject(Subject subject) throws IOException {
    ensureInitialized();
    try {
      if (subject == null) {
        subject = new Subject();
      }
      LoginContext login = newLoginContext(authenticationMethod.getLoginAppName(),
                          subject, new HadoopConfiguration());
      login.login();
      UserGroupInformationTest realUser = new UserGroupInformationTest(subject);
      realUser.setLogin(login);
      realUser.setAuthenticationMethod(authenticationMethod);
      realUser = new UserGroupInformationTest(login.getSubject());
      // If the HADOOP_PROXY_USER environment variable or property
      // is specified, create a proxy user as the logged in user.
      String proxyUser = System.getenv(HADOOP_PROXY_USER);
      if (proxyUser == null) {
        proxyUser = System.getProperty(HADOOP_PROXY_USER);
      }
      loginUser = proxyUser == null ? realUser : createProxyUser(proxyUser, realUser);

      String fileLocation = System.getenv(HADOOP_TOKEN_FILE_LOCATION);
      if (fileLocation != null) {
        // Load the token storage file and put all of the tokens into the
        // user. Don't use the FileSystem API for reading since it has a lock
        // cycle (HADOOP-9212).
        Credentials cred = Credentials.readTokenStorageFile(
            new File(fileLocation), conf);
        loginUser.addCredentials(cred);
      }
      loginUser.spawnAutoRenewalThreadForUserCreds();
    } catch (LoginException le) {
      LOG.debug("failure to login", le);
      throw new IOException("failure to login", le);
    }
    if (LOG.isDebugEnabled()) {
      LOG.debug("UGI loginUser:"+loginUser);
    } 
  }

如下为一个安全配置文件示例:

UsernamePassword {
   javax.security.examples.auth.spi.UsernamePasswordLoginModule required debug=true;
};

它通过系统参数传入:

-Djava.security.auth.login.config=jaas.config

3. LoginContext 通过 javax.security.auth.login.Configuration 对象获取 LoginModule 实例列表。通常 Configuration 对象的实现在实例化过程中加载解析配置文件。

4. Configuration 对象返回 LoginModule 实例列表

5. 客户端代码调运 LoginContext 的 login 方法

6. LoginContext 根据 Configuration 对象返回 LoginModule 实例列表,实例化 LoginModule。

7. LoginContext 调运 LoginModule 的 initialize 方法

8. LoginContext 调运 LoginModule 的 login 方法

9. LoginContext 调运 LoginModule 的 commit 方法

10. 认证的信息被保存在 Subject 中

相关文章

  • kafka使用SASL_PLAINTEXT做用户认证

    使用SASL/PLAIN认证 server端1.配置brokerkafka_server_jaas.conf内容K...

  • Kafka SASL 安全认证

    服务端 在服务器节点配置认证文件:文件路径:kafka/config/kafka_server_jaas.conf...

  • Java认证与授权 - JAAS

    JAAS简介 JAAS全称为 Java Authentication Authorization Service,...

  • JAAS 参考指南

    术语中英对照 概览 JAAS 代表Java身份验证和授权服务,它被用于两个目的: 用户认证,可靠且安全地确定当前是...

  • 有机认证流程(一)

    1目的和范围 该说明概述了有机认证过程的步骤,为任何感兴趣认证的人提供指南。 2责任 以下各方要求完 成认证程序:...

  • Subject vs. User vs. Principal i

    When an application uses JAAS authentication to authentic...

  • SpringSecurity开发基于表单的认证(四)

    认证流程源码级详解 认证处理流程说明 认证结果如何在多个请求之间共享 获取认证用户信息 认证处理流程说明 分析 上...

  • 数据库认证ocp

    Ocp认证指的是Oracle库认证专家,属于O‌‌‌‌‌‌‌‌racle中级认证,考取该项资格认证说明你已经具备了...

  • Shiro授权和认证流程

    认证流程 认证过程: 身份认证,就是判断一个用户是否为合法用户的处理过程.醉常用的简单身份认证方式是系统通过核对用...

  • kafka 配置 sasl 认证

    版本: kafka_2.13-2.6.0 1 在config下面新建kafka_client_jaas.conf文...

网友评论

      本文标题:jaas 认证过程说明

      本文链接:https://www.haomeiwen.com/subject/hzxhsdtx.html