转:http://www.nosqlnotes.com/technotes/jaas-concept/

JAAS是”Java Authentication and Authorization Service“的缩写,它提供了认证与授权的基础框架与接口定义,而且提供了良好的插件化机制。本文主要探讨JAAS的基础概念,这些概念也是认证与授权技术中的常用概念。

Subject

如果要授权访问一些资源,需要先对资源请求主体进行认证。JAAS框架中,使用Subject来描述这个资源请求主体与安全访问相关的信息,因此,一个Subject通常是指一个对象实体,或者一个服务。
Subject中所关联的信息,主要涉及:

  • 身份信息
  • 密码信息
  • 加密密钥/凭据信息

一个Subject可能拥有一个或多个身份,一个身份被称之为Principal,也就是说,一个Subject可能关联一个或多个Principals。
一个Subject可能涉及与安全有关的凭据信息(密钥/票据),称之为Credentials。敏感的Credentials需要特别的保护措施,例如,私有密钥信息,被保存在一个私钥集合中。而关于公有秘钥信息,则被保存在另外一个公钥集合中。

如下示例代码给出了如何为一个Subject添加Principal以及公钥信息:

Subject subject;
Principal principal;
Object credential;

// 获取所有的Principals列表,并且加入新的Principal。
subject.getPrincipals().add(principal);
// 获取公钥列表信息,并加入新的公钥列表。
subject.getPublicCredentials().add(credential);

  

LoginContext

认证上下文信息。LoginContext中提供了针对Subject对象进行认证的基础方法,每一个LoginContext都关联一个Context Name。LoginContext的关键方法如下:

  • login 登录/认证,该过程由具体的LoginModule代理完成。
  • logout 登出
  • getSubject 获取认证之后所创建的Subject对象信息

初始化一个LoginContext对象时,可以传入如下一些参数:

  • Context Name[必选]
  • Subject[可选]
  • CallbackHandler[可选]
  • Configuration[可选]

LoginModule

LoginModule提供了登录/认证的基础接口定义,所有的认证服务都需要实现该接口。一些典型的实现模块包括:

  • Krb5LoginModule 基于Kerberos的登录/认证服务模块
  • JndiLoginModule 基于用户名和密码的登录/认证服务模块
  • KeyStoreLoginModule 基于KeyStore的登录/认证服务模块

LoginModule中涉及到两个主要方法为login与’commit’:

login

对Subject进行认证。

这个过程中主要涉及到用户名和密码信息提示,校验用户密码。认证结果将会在LoginModule层面暂时保存。

commit

Commit过程首先确认LoginModule中保存的认证结果。认证成功之后,Commit方法将Subject内对应的Principals以及Credentials关联起来。如果Login方法认证失败的话,则该方法将会清理在LoginModule中保存的认证结果信息。

总结

本文主要介绍了JAAS中的三个基础概念:

  • Subject 描述要进行认证的对象实体/服务,以及与之有关的安全信息。
  • LoginContext 认证上下文,提供了登录/认证相关的基础方法。LoginContext的认证由具体的LoginModule实现。
  • LoginModule 认证服务接口类,不同的认证服务均需要实现该接口。

Java认证与授权服务JAAS基础概念的更多相关文章

  1. 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序

     1 什么是服务器 Weblogic中服务器分为两种,一种是受管服务器,另外一种是管理服务器. Weblogic课程(Weblogic是Oracle公司的,最开始的是BEA公司的) 一 系统管理 ...

  2. Java并发程序设计(一) 基础概念

    Java并发程序设计(一) 基础概念 一.必须知道的几个概念 一)同步(Synchronous)和异步(Asynchronous) 同步:同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后 ...

  3. CAS 5.x搭建常见问题系列(1).未认证的授权服务

    错误内容 错误信息如下: 未认证授权的服务 CAS的服务记录是空的,没有定义服务.希望通过CAS进行认证的应用程序必须在服务记录中明确定义 错误原因 CAS 5.x 默认情况下不支持HTTP的客户端接 ...

  4. .NETCore微服务探寻(二) - 认证与授权

    前言 一直以来对于.NETCore微服务相关的技术栈都处于一个浅尝辄止的了解阶段,在现实工作中也对于微服务也一直没有使用的业务环境,所以一直也没有整合过一个完整的基于.NETCore技术栈的微服务项目 ...

  5. ASP.NET Core 3.0 gRPC 身份认证和授权

    一.开头聊骚 本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文.本文主要讲 ASP.NET Core 本身的认证授权和gRPC接 ...

  6. Java Web系列:JAAS认证和授权基础

    1.认证和授权概述 (1)认证:对用户的身份进行验证. .NET基于的RBS(参考1)的认证和授权相关的核心是2个接口System.Security.Principal.IPrincipal和Syst ...

  7. Spring Cloud Security OAuth2.0 认证授权系列(一) 基础概念

    世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. 前序 最近想搞下基于Spring Cloud的认证授权平台,总体想法是可以对服务间授权,想做一个基于Agent 的无 ...

  8. Spring Cloud 微服务中搭建 OAuth2.0 认证授权服务

    在使用 Spring Cloud 体系来构建微服务的过程中,用户请求是通过网关(ZUUL 或 Spring APIGateway)以 HTTP 协议来传输信息,API 网关将自己注册为 Eureka ...

  9. JAVA一些基础概念

    Java (计算机编程语言) Java是一门面向对象编程语言,不仅吸收了C++语言的各种长处,还摒弃了C++里难以理解的多继承.指针等概念.因此Java语言具有功能强大和简单易用两个特征. Java语 ...

随机推荐

  1. Python Django ORM 字段类型、参数、外键操作

    AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 primary ...

  2. JavaScript-点击表格的表头进行排序

    HTML如下: <table class="heroinfo"> <thead title="点击排序"> <tr> < ...

  3. Drupal8学习之路--官网文档碎碎记--主题篇

    主要记录一些琐碎的知识点. 1.“In Drupal 8 drupal_add_css(), drupal_add_js() and drupal_add_library()were removed ...

  4. opencv3.2.0形态学滤波之腐蚀

    /* 腐蚀(erode)含义: 腐蚀和膨胀是相反的一对操作,所以腐蚀就是求局部最小值的操作,腐蚀操作使原图中 国的高亮部分被腐蚀,效果图比原图有更小的高亮的区域. 腐蚀函数原型API及参数同膨胀相同 ...

  5. DROP语句总结

    一.基本语句 通过使用 DROP 语句,可以轻松地删除索引.表和数据库.  1.DROP INDEX 语句 DROP INDEX 语句用于删除表中的索引. <!--用于 MS Access 的 ...

  6. d3js layout 深入理解

    D3 layouts help you create more advanced visualisations such as treemaps: D3 layouts帮助您创造更加高级复杂的可视化图 ...

  7. Oracle EBS 取总账期间

    --取期间 select GPS.EFFECTIVE_PERIOD_NUM, GPS.PERIOD_NAME from GL_PERIOD_STATUSES GPS AND (GPS.SET_OF_B ...

  8. Oracle EBS AR 更新客户组织层

    declare -- Local variables here i integer; g_module ) := 'TCA_V2_API'; lrec_org hz_party_v2pub.organ ...

  9. [IIS] [PHP] 500.19 随机出现

    微信确认有BUG: https://support.microsoft.com/en-au/help/3007507/-http-error-500.19-error-when-you-browse- ...

  10. C# 标准的MD5加密32位

    标准的MD5加密32位小写的: public static string GetMD5(string myString) { MD5 md5 = new MD5CryptoServiceProvide ...