Shiro身份认证之principals和credentials

简介: Shiro身份认证之principals和credentials

所谓的身份验证,即在应用中证明用自己的身份。一般比如提供如身份证ID、用户名等来证明是他本人,而用密码来验证。


在《02.Shiro认证与授权原理分析》中我们分析了Shiro验证和授权的基本原理。


其中,在验证的流程中涉及到2个概念:principals和credentials。


在shiro中,用户需要提供principals(身份)和credentials(证明)给shiro,从而应用能验证用户身份:


principals/身份

什么是principal?principals:身份,即主体的标识属性,如用户名、邮箱等,确保唯一即可。


在PrincipalCollection类中的getPrimaryPrincipal()方法中可以看到官方对principal的解释:


Object getPrimaryPrincipal();

1

该方法可获得一个principal的对象,通过返回类型为Object可以看出,principal可以为任意对象。


再看看该类上对返回结果的描述:


Returns the primary principal used application-wide to uniquely identify the owning account/Subject.
The value is usually always a uniquely identifying attribute specific to the data source that retrieved the account data. Some examples:
a UUID
a long value such as a surrogate primary key in a relational database
an LDAP UUID or static DN
a String username unique across all user accounts

通过官方注释可以看出principal通常有以下类型:


1)可以是uuid

2)数据库中的主键

3)LDAP UUID或静态DN

4)在所有用户帐户中唯一的字符串用户名。

也就是说这个值必须是唯一的。也可以是邮箱、身份证等值。


一个主体可以有多个principals,但只有一个Primary principals,一般是用户名/密码/手机号。


上面是通过PrincipalCollection类提供的方法进行获取principals,通常在使用之前通过构造方法将其传入:


public SimpleAuthenticationInfo(Object principal, Object credentials, String realmName) {

   this.principals = new SimplePrincipalCollection(principal, realmName);

   this.credentials = credentials;

}

1

2

3

4

principal添加到对应的集合中。添加的过程首先判断是否为Collection类型如果是就以添加集合的方式添加,如果不是就添加单个对象。


this.principals = new SimplePrincipalCollection(principal, realmName);

1

credentials/证明

credentials:证明/凭证,即只有主体知道的安全值,如密码/数字证书等。


最常见的principals和credentials组合就是用户名/密码了。


Shiro相关系列文章

《还在亲手写Filter进行权限校验?尝试一下Shiro吧》


《不解释,全网最全Shiro认证与授权原理分析》



目录
相关文章
|
安全 Java API
Shiro 身份认证绕过漏洞 CVE-2022-32532
Apache Shiro 是一个强大且易用的 Java 安全框架,通过它可以执行身份验证、授权、密码和会话管理。使用 Shiro 的易用 API,您可以快速、轻松地保护任何应用程序 —— 从最小的移动应用程序到最大的 WEB 和企业应用程序。
416 0
Shiro 身份认证绕过漏洞 CVE-2022-32532
|
缓存 安全 Apache
2021年你还不会Shiro?----3.分析身份认证源码实现自定义Realm
我们已经知道无论我们是认证还是授权,数据的获取都是来源于Realm,Realm就相当于我们的datasource,在上一篇中我们使用的是用IniRealm来加载我们的配置文件shiro.ini,同时我们也说了ini只是临时解决方案,在实际的开发中是不可能把用户信息和权限信息放在ini文件中的,都是来源于数据库,那么系统提供的IniRealm就不能满足我们的需要了,我们就需要自定义Realm来实现真正的场景,事实上ini文件也只是apache为我们提供学习使用的策略,下面我们就来看下怎么自己定义一个Realm。
91 0
2021年你还不会Shiro?----3.分析身份认证源码实现自定义Realm
|
存储 缓存 安全
2021年你还不会Shiro?----2.Shiro实现登录功能(身份认证实践)
上一篇介绍了Shiro的架构,我们可以发现Shiro核心的东西并不多,我们花个几分钟就可以把Shiro的机构记清楚,其中Security Manager就是Shiro的核心,他包含了身份认证器Authenticator、授权器Authorizer、Session管理Session Manager、缓存管理Cache Manager。这一篇我们就介绍下Shiro的身份认证的过程,也就是我们说的用户登录。
116 0
2021年你还不会Shiro?----2.Shiro实现登录功能(身份认证实践)
|
SQL 数据库 数据安全/隐私保护
Shiro框架学习笔记(二)基于内置ini文件的身份认证
Shiro框架学习笔记(二)基于内置ini文件的身份认证
Shiro框架学习笔记(二)基于内置ini文件的身份认证
|
存储 缓存 安全
Apache Shiro身份认证过程详解
Apache Shiro身份认证过程详解
216 0
Apache Shiro身份认证过程详解
|
Apache 容器
菜鸟学习shiro之入门的简单登录认证和身份认证1
最近学习了四郎,学的是天南海北,一头雾水,概念懂了,实践呐,就很是缺乏,于是跟着慕课网的视频教程敲敲代码 果然加深了理解,话不多说,直接看代码 Maven的依赖: log4j log4j 1.
1429 0
|
安全 Java 数据安全/隐私保护
Shiro之身份认证、与spring集成(入门级)
目录 1. Shro的概念 2. Shiro的简单身份认证实现 3. Shiro与spring对身份认证的实现   前言:   Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。
1628 0
|
Web App开发 缓存 Java
SpringBoot学习:整合shiro(身份认证和权限认证),使用EhCache缓存
项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)在pom.xml中添加依赖:   [html] view plain copy          1.
3217 0
|
2月前
|
关系型数据库 MySQL 数据库
云计算|OpenStack|社区版OpenStack安装部署文档(三 --- 身份认证服务keystone安装部署---Rocky版)
云计算|OpenStack|社区版OpenStack安装部署文档(三 --- 身份认证服务keystone安装部署---Rocky版)
78 0
|
存储 运维 网络协议
阿里云SMB协议文件存储服务支持基于AD域的用户身份认证及权限访问控制介绍
在本文中,我们首先简单介绍文件系统的用户认证和访问权限控制的概念,然后介绍阿里云SMB协议文件存储服务支持基于AD域系统的用户身份认证及访问权限控制的设计实现。
3910 0
阿里云SMB协议文件存储服务支持基于AD域的用户身份认证及权限访问控制介绍