springboot+oauth2初尝试

本文深入介绍了OAuth2.0协议的原理,包括其角色、授权类型和授权流程,并通过微信用户信息获取示例进行了说明。同时,文章详细展示了如何在SpringBoot2项目中集成OAuth2.0,包括配置资源服务器、认证服务器和SpringSecurity,以及通过Postman调试四种授权模式的实际操作。

一、Oauth2
1.1、Oauth2
OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息。即允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。
OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。

1.2、OAuth 2.0主要角色
①客户应用 (Client Application) :通常是一个Web或者无线应用, 它需要访问用户的受保护资源
②资源服务器 (Resource Server) :是一个web站点或者web service API,用户的受保护数据保存于此
③授权服务器 (Authorized Server) :在客户应用成功认证并获得授权之后,向客户应用颁发访问令牌 Access Token
④资源拥有者 (Resource Owner) :资源的拥有人, 想要分享某些资源给第三方应用
Oauth2角色详细分为如下:
①Third-party application:第三方应用程序,本文中又称"客户端"(client)
②HTTP service:HTTP服务提供商,本文中简称"服务提供商"
a、Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
b、Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
③Resource Owner:资源所有者,本文中又称"用户"(user)。
④User Agent:用户代理,本文中就是指浏览器。

1.3、OAuth 2.0授权类型(Flows)
OAuth2.0 定义了 四种授权模式:
①授权码Authorization Code:授权码模式,结合普通服务器端应用使用。
②简化Implicit:简化模式,结合移动应用或 Web App 使用。
③用户名密码Resource Owner Credentials:密码模式,适用于受信任客户端应用,例如同个组织的内部或外部应用。
④客户端凭证Client Credentials:客户端模式,适用于客户端调用主服务API型应用(比如百度API Store)

1.4、OAuth2 授权流程
获取微信用户信息示例来说
①微信用户a,访问第三方应用分享到微信中的活动页面,第三方应用即向微信授权服务器 发起授权请求以获取该微信用户a在微信服务器上的姓名,头像等基本信息(私有资源)
②微信授权服务器接收到第三方应用的授权请求(包含第三方应用的回调地址的),并引导用户确认授权(也可以选择用户静默授权)后,返回授权许可(code)给到第三方应用(根据授权请求传入的回调地址)
③第三方应用拿到授权许可code后,再次向微信授权服务器发起访问令牌的请求(携带身份app_id等)
④微信授权服务器验证第三方应用的身份以及授权许可code,验证通过后将下发访问令牌access_code,此外还有刷新令牌以及令牌过期时间等信息给到第三方应用
⑤第三方应用拿到访问令牌后向微信资源服务器发起请求资源,即请求微信用户a的姓名,头像,地域等基本信息
⑥微信资源服务器根据访问令牌,返回微信用户a的基本信息给到第三方应用。

1.5、授权服务
授权服务器的工作由资源服务器提供,主要提供两类接口。
①获取授权接口:接受第三方应用的授权请求,引导用户到资源服务器完成登陆授权的过程
②获取访问令牌接口:使用授权接口提供的许可凭证来颁发用户的访问令牌给到第三方应用,或者又第三方应用更新过期的访问令牌。

①AuthorizationEndpoint:用来作为请求者获得授权的服务,默认的URL是/oauth/authorize.
②TokenEndpoint:用来作为请求者获得令牌(Token)的服务,默认的URL是/oauth/token.

二、springboot2集成oauth2
2.1、创建SpringBoot项目
开发工具:idea2019.3
Jdk版本:java1.8
调试工具:postman
目录结构:一个认证服务oauth、一个资源服务resource
oauth有登录和用户查询相关接口,resource没有登录接口,只有业务接口
2.2、springboot2集成oauth2
Oauth2实例可以分为简易的分为三个步骤:配置资源服务器、配置认证服务器、配置spring security。
pom文件添加oauth2依赖如下

		<!-- 引入security依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

        <!-- 引入oauth2 依赖-->
        <!-- 由于一些注解和API从spring security5.0中移除,所以需要导入下面的依赖包  -->
        <dependency>
            <groupId>org.springframework.security.oauth.boot</groupId>
            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>

2.2.1、配置资源服务器

@Slf4j
@Configuration
@EnableResourceServer
public class Oauth2ResourceServerConfig extends ResourceServerConfigurerAdapter {
   
   

    @Autowired
    private CustomAuthenticationEntryPoint customAuthenticationEntryPoint;

    @Autowired
    private CustomAccessDeniedHandler customAccessDeniedHandler;

    @Autowired
    private RoleMapper roleMapper;

    @Autowired
    private PermissionMapper permissionMapper;

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
   
   
        resources.resourceId("oauth2-resource1").stateless(true);

        //若认证和资源
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值