第一节 身份认证的基本流程

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yanluandai1985/article/details/79168435

前言

        先感谢涛哥写了这么好的文章,附上原文学习地址:涛哥的shiro教程

        学习完孤傲苍狼和涛哥的博客,觉得分享知识是一种进步,原因很简单:能把别人教会了的博客,一定是好博客。我始终相信,写博客的受益者之一永远都有自己。

        因为自己水平有限,推荐看完涛哥的博客后,再来看看我写的总结,对于博主来说,就已经心满意足了。本系列已经默认你有一定的Shiro基础,可作为您学完Shiro后的查漏补缺。如果您有任何疑问或者建议,欢迎在文章下面进行评论。我期待与大家一起交流学习、共同进步。

        本系列教程源码:点击我下载源码

一、基本流程

 

 

        Subject:主体,用来与用户交互的对象。它其实是一个门面对象,专门用于管理来自客户端的数据。比如客户端传来了一批帐号密码数据,它需要将这批数据传入Shiro的内部核心SecurityManager中,以验证帐号密码是否正确。再比如,判断当前用户是否有相关的角色,它会去问问内部的SecurityManager,这个人是“小学生角色”吗?

        你懂的理解就是:Subject就是一个拉客滴,它知道本会所提供的所有服务。来了一批客人,它需要将客人引进到SecurityManager中进行服务,所以说SecurityManager是shiro底层的核心

        SecurityManager:安全中心,它相当于“用户信息”与“数据源”的中间者。用户信息指用户在WEB页面上输入的数据,通常指 用户名、邮箱、密码、手机号等。 “数据源”指数据库中存放的数据。    SecurityManager的作用就是把“用户信息”拿去与“数据源”比对,看“用户信息”是不是存在于“数据源”中。

        Realm:数据源。Shiro从数据库中查询一些数据,保存在Realm这种对象中。Shiro会把从Subject中获取的数据与Realm的数据进行对比,从而确定客户端传来的帐号密码是否正确。

        流程如下:

        步骤一:Shiro把用户的数据封装成标识token,token一般封装着用户名,密码等信息。

        步骤二:使用Subject门面获取到封装着用户的数据的标识token

        步骤三:Subject把标识token交给SecurityManager,在SecurityManager安全中心中,SecurityManager把标识token委托给认证器Authenticator进行身份验证。认证器的作用一般是用来指定如何验证,它规定本次认证用到哪些Realm。

        步骤四:认证器Authenticator将传入的标识token,与数据源Realm对比,验证token是否合法。

        从代码的层面来理解:  Subject对象其实是一个门面类,它能够执行非常多的操作,例如认证授权用户退出。但是它实际上将这些操作委托给内部的SecurityManager去做。简单点说,Subject的底层实现就是SecurityManager。

        public class Subject ...

                   private SecurityManager  securityManager;

                   public  void  我们有按摩服务() {  securityManager. 按摩() ; }

二、相关理解

        认证:脑补流程图(1)是否可以匿名访问(2)用户是否已经验证通过(3)输入用户名与密码进行身份认证

        Subject是与用户交互的对象,提供关于认证授权等方法。

        Principal身份凭证信息,是主体Subject进行身份认证的标识,如手机、用户名、邮箱,一个主体必须有一个主身份Primary Principal。可视为username 。

        Credential密码信息。可视为密码password。
        顺便提一下"授权"。授权的前提是必须要先进行认证。主体进行身份认证后需要分配权限方可访问系统资源。授权可以简单理解为:先检查用户是否认证通过,再检查用户是否有访问相应资源的权限。例如要下载CSDN上的某个VIP资源,先要登录CSDN,完成用户的认证。再判断当前用户是否是VIP,如果是的话允许下载,不是的话拒绝访问。

三、验证代码

        首先导入shiro的依赖。

<dependencies>  
    <dependency>  
        <groupId>junit</groupId>  
        <artifactId>junit</artifactId>  
        <version>4.9</version>  
    </dependency>  
    <dependency>  
        <groupId>commons-logging</groupId>  
        <artifactId>commons-logging</artifactId>  
        <version>1.1.3</version>  
    </dependency>  
    <dependency>  
        <groupId>org.apache.shiro</groupId>  
        <artifactId>shiro-core</artifactId>  
        <version>1.2.2</version>  
    </dependency>  
</dependencies>   

        编写Junit测试用例 

public class MyFirstTest {
    @Test
    public void test1() {
        //读取配置文件,相当于在加载数据源
        Factory<org.apache.shiro.mgt.SecurityManager> factory = 
                           new IniSecurityManagerFactory("classpath:shiro_1.ini");
        //SecurityManager 是Shiro内部的底层实现,几乎所有功能都由其实现
        org.apache.shiro.mgt.SecurityManager sm = factory.getInstance();
        //SecurityUtils是一个工具,方便用户调用,它封装了SecurityManager 
        SecurityUtils.setSecurityManager(sm);
        //生成一个SecurityManager的门面类,即Subject。
        Subject subject = SecurityUtils.getSubject();
        //封装用户的数据
        UsernamePasswordToken token = new UsernamePasswordToken("jay", "123");
        //Subject接收到的方法参数,最终将会传到SecurityManager中进行验证
        //将用户的数据token 最终传递到Realm中进行对比
        subject.login(token);
        //判断本帐号是否已经被认证
        Assert.assertEquals(true, subject.isAuthenticated());
    }
}

        仅仅寥寥几行代码就能展现出大佬的代码风范。首先使用工厂设计模式,通过一个工厂返回一个SecurityManager实例。再者,Subject对象负责与用户交互,接收客户端数据,将数据封装好后委托给内部的SecurityManager对象,上述步骤则是门面设计模式的体现,Subject是门面,SecurityManager是底层核心。

        最后编写我们的shiro配置文件  shiro_1.ini。

        shiro_1.ini配置文件内容如下,它就是数据源Realm。

[users]
jay=123

四、源码下载

        本章节项目源码:点击我下载源码 

-------------------------------------------------------------------------------------------------------------

        下一篇:第二节:自定义Realm作为数据源

        阅读更多:跟着大宇学Shiro目录贴

 

 

 

 

展开阅读全文

APP身份认证流程

04-17

n 课程要求<span></span>nn<p>n ·         至少熟悉一门开发语言,如<span>C#</span>,<span>Java</span>,<span>PHP</span>等<span></span>n</p>n<p>n ·         Visual Studio nC# + ASP.NET MVC开发经验n</p>nn 课程介绍<span></span>nn<p>n      课程将由浅入深带领大家学习基于微软Azure和Office 365的开发技能,详细介绍了AzurenActive Directory (简称AAD)的认证原理,以及Azure AD与Office 365应用程序的关系,通过业务开发场景,结合示例代码为大家解读Microsoft Graph API开发技能,快速与现有业务系统进行应用集成,为客户提高更优质的服务。n</p>nn 课程安排:<span></span>nn<p>n n  n第一讲:<span>MS Graph</span>介绍和环境配置<span></span>n</p>n<p>n u  Microsoft Graph介绍n</p>n<p>n u  认证与授权n</p>n<p>n u  终结点和平台支持n</p>n<p>n u  开发工具和<span>Officen365</span>账号n</p>n<p>n u  演示n</p>n<p>n n  n第二讲:<span>Azure AD</span>和<span>Office 365</span>应用程序<span></span>n</p>n<p>n u  Azure AD目录和<span>Officen365</span>目录n</p>n<p>n u  Azure AD和<span>Azure AD</span>应用程序n</p>n<p>n u  使用<span>AzurenPortal</span>创建<span>Azure AD</span>应用程序n</p>n<p>n u  使用<span>Powershell</span>创建<span>Azure AD</span>应用程序n</p>n<p>n u  单租户与多租户的区别n</p>n<p>n n  n第三讲:<span>Azure AD</span>和<span>Office 365</span>认证原理<span></span>n</p>n<p>n u  Azure AD&amp;O365认证介绍n</p>n<p>n u  认证流程分析n</p>n<p>n u  OpenID Connectn</p>n<p>n u  应用程序权限n</p>n<p>n n  n第四讲:<span>Azure AD Web</span>开发入门<span></span>n</p>n<p>n n  n第五讲:桌面应用调用<span>API</span>n</p>n<p>n n  n第六讲:<span>Web</span>应用程序调用<span>API-APP</span>身份<span></span>n</p>n<p>n n  n第七讲:<span>Web</span>应用程序调用<span>API-</span>委派身份<span></span>n</p>n<p>n n  n第八讲:无人值守使用程序调用<span>API</span>n</p>

委派身份认证流程

04-17

n 课程要求<span></span>nn<p>n ·         至少熟悉一门开发语言,如<span>C#</span>,<span>Java</span>,<span>PHP</span>等<span></span>n</p>n<p>n ·         Visual Studio nC# + ASP.NET MVC开发经验n</p>nn 课程介绍<span></span>nn<p>n      课程将由浅入深带领大家学习基于微软Azure和Office 365的开发技能,详细介绍了AzurenActive Directory (简称AAD)的认证原理,以及Azure AD与Office 365应用程序的关系,通过业务开发场景,结合示例代码为大家解读Microsoft Graph API开发技能,快速与现有业务系统进行应用集成,为客户提高更优质的服务。n</p>nn 课程安排:<span></span>nn<p>n n  n第一讲:<span>MS Graph</span>介绍和环境配置<span></span>n</p>n<p>n u  Microsoft Graph介绍n</p>n<p>n u  认证与授权n</p>n<p>n u  终结点和平台支持n</p>n<p>n u  开发工具和<span>Officen365</span>账号n</p>n<p>n u  演示n</p>n<p>n n  n第二讲:<span>Azure AD</span>和<span>Office 365</span>应用程序<span></span>n</p>n<p>n u  Azure AD目录和<span>Officen365</span>目录n</p>n<p>n u  Azure AD和<span>Azure AD</span>应用程序n</p>n<p>n u  使用<span>AzurenPortal</span>创建<span>Azure AD</span>应用程序n</p>n<p>n u  使用<span>Powershell</span>创建<span>Azure AD</span>应用程序n</p>n<p>n u  单租户与多租户的区别n</p>n<p>n n  n第三讲:<span>Azure AD</span>和<span>Office 365</span>认证原理<span></span>n</p>n<p>n u  Azure AD&amp;O365认证介绍n</p>n<p>n u  认证流程分析n</p>n<p>n u  OpenID Connectn</p>n<p>n u  应用程序权限n</p>n<p>n n  n第四讲:<span>Azure AD Web</span>开发入门<span></span>n</p>n<p>n n  n第五讲:桌面应用调用<span>API</span>n</p>n<p>n n  n第六讲:<span>Web</span>应用程序调用<span>API-APP</span>身份<span></span>n</p>n<p>n n  n第七讲:<span>Web</span>应用程序调用<span>API-</span>委派身份<span></span>n</p>n<p>n n  n第八讲:无人值守使用程序调用<span>API</span>n</p>

没有更多推荐了,返回首页