SpringSecurityOauth2授权模式与使用RSA非对称加密方式生成公钥私钥

一、用户认证分析

在这里插入图片描述
上面流程图描述了用户要操作的各个微服务,用户查看个人信息需要访问用户微服务,下单需要访问订单微服务,秒杀抢购商品需要访问秒杀微服务。
每个服务都需要认证用户的身份,身份认证成功后,需要识别用户的角色然后授权访问对应的功能。

1.1 认证与授权

身份认证

用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问。常见的用户身份认证表现形式有:用户名密码登录,指纹打卡等方式。说通俗点,就相当于校验用户账号密码是否正确

用户授权

用户认证通过后去访问系统的资源,系统会判断用户是否拥有访问资源的权限,只允许访问有权限的系统资源,没有权限的资源将无法访,这个过程叫用户授权

1.2 单点登录

用户访问的项目中,至少有3个微服务需要识别用户身份,如果用户访问每个微服务都登录一次就太麻烦了,为了提高用户的体验,我们需要实现让用户在一个系统中登录,其他任意受信任的系统都可以访问,这个功能就叫单点登录
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。 SSO的 定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统

1.3 第三方登录

随着国内及国外巨头们的平台开放战略以及移动互联网的发展,第三方登录已经不是一个陌生的产品设 计概念了。 所谓的第三方登录,是说基于用户在第三方平台上已有的账号和密码来快速完成己方应用的 登录或者注册的功能。而这里的第三方平台,一般是已经拥有大量用户的平台,国外的比如 Facebook,Twitter等,国内的比如微博、微信、QQ等。

二、认证技术方案了解(单点登录+第三方授权认证)

2.1单点登录技术方案

Java中有很多用户认证的框架都可以实现单点登录:
1、Apache Shiro.
2、CAS
3、Spring security

2.2 Oauth2认证

第三方认证技术方案最主要是解决认证协议的通用标准问题,因为要实现跨系统认证,各系统之间要遵 循一定的 接口协议。 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时, 任何第三方都可以使用OAUTH认 证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而 OAUTH是开放的。业界提供了OAUTH的多种实现如PHP、JavaScript,Java,Ruby等各种语言开发 包,大大节约了程序员的时间,因而OAUTH是简易的。互联网很多服务如Open API,很多大公司如 Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放 资源授权的标准。 Oauth协议目前发展到2.0版本,1.0版本过于复杂,2.0版本已得到广泛应用。
Oauth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容, Oauth2.0是 Oauth协议的延续版。

三、SpringSecurity Oauth2.0入门

导入依赖

 		<dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-data</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-security</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

Oauth2的四种授权模式

Oauth2有一下授权模式:

  1. 授权码模式(Authorization Code )常用
  2. 密码模式(Resource Owner Password Credentials) 常用
  3. 隐式授权模式 不常用
  4. 客户端模式 不常用

1. 授权码模式授权

Oauth2包括以下角色:
1、客户端 本身不存储资源,需要通过资源拥有者的授权去请求资源服务器的资源,比如:畅购、Android客户端、畅购Web客户端(浏览器端)、微信客户端等。
2、资源拥有者 通常为用户,也可以是应用程序,即该资源的拥有者。
3、授权服务器(也称认证服务器) 用来对资源拥有的身份进行认证、对访问资源进行授权。客户端要 想访问资源需要通过认证服务器由资源拥有者授 权后方可访问。
4、资源服务器 存储资源的服务器,比如,畅购用户管理服务器存储了畅购的用户信息,微信的资源服 务存储了微信的用户信息等。客户端最终访问资源服务器获取资源信息。

授权码授权流程:
1、客户端(比如说淘宝官网)请求第三方授权
2、资源拥有者(用户)同意给客户端授权
3、客户端获取到授权码,请求认证服务器申请令牌
4、认证服务器向客户端响应令牌
5、客户端请求資源服务器的资源,资源服务校验令牌合法性,完成授权
6、资源服务器返回受保护资源

授权码模式授权步骤流程:

1.1申请授权码

Get请求:http://localhsot:9001/oauth/authorize?client_id=changgou&response_type=code&scop=app&redirect_uri=http://localhost
参数列表如下:

client_id:客户端id,和授权配置类中设置的客户端id一致。
response_type:授权码模式固定为code
scop:客户端范围,和授权配置类中设置的scop一致。
redirect_uri:跳转uri,当授权码申请成功后会跳转到此地址,并在后边带上code参数(授权码)

首先跳转到登录页面:http://localhost:9001/login
在这里插入图片描述

输入账号和密码,点击Login。
Spring Security接收到请求会调用UserDetailsService接口的 loadUserByUsername方法查询用户正确的密码。 当前导入的基础工程中客户端ID为changgou,秘钥 也为changgou即可认证通过。
下面页面代表密码正确,认证成功。(因为没有配置登陆成功后的页面才会Error)。
在这里插入图片描述

接下来进入授权页面:http://localhost:9001/oauth/authoriz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu_Shihao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值