Spring Authorization Server入门 (二) Spring Boot整合Spring Authorization Server

在新版本的sas(1.2.1)中获取token更新了授权码校验逻辑,只能用form-data传递参数,使用url-params会失败,原因见issue1451
对应的 commit 在这里: Fix to ensure endpoints distinguish between form and query parameters

前言

文章较长,步骤比较繁琐,请各位读者耐心观看。
上篇文章大概了解了下框架的相关理论,本篇文章将带大家一步步构建一个简单的认证服务器
开始之前先放一下文档的链接:官网文档

项目环境要求(当前框架版本1.1.0)

  1. spring boot版本大于等于3.1.0-RC1
  2. JDK版本大于等于17

认证项目搭建

1. 在Idea中或spring Initializr中创建Spring boot项目

  1. Spring Boot版本选择3.1.0,Java版本选择17以上,在Dependencies中勾选Spring Authorization Server和spring web依赖,其它看自己需要

    引入持久层框架(本人用的是MybatisPlus,读者可自选)

     <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.5.3.1</version>
     </dependency>
    

    引入webjars和bootstrap,自定义登录页和确认页面时使用

    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>webjars-locator-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap</artifactId>
        <version>5.2.3</version>
    </dependency>
    

    项目pom.xml示例

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.cssjc.com/42692813413f4730bb24efa1b362e434.png" alt="登录页面图">

    3. 输入AuthorizationConfig中配置的账号密码

    账号:admin, 密码:123456

    4. 登录成功后跳转至授权确认页面

    登录成功跳转至第1步的授权接口,授权接口检测到用户未确认授权,跳转至授权确认页面

    选择对应的scope并提交确认权限

    5. 提交后重定向至第1步的授权接口

    授权接口生成code并重定向至第1步请求授权接口时携带的redirectUri地址,重定向时携带上参数code和state,我这里省略掉了state参数,重定向之后只会携带code参数;state用来防止CSRF攻击,正式请求需生成并携带state参数。

    6. 用户确认授权后携带code跳转至redirectUri

    一般来说配置的回调地址都是客户端的接口,接口在接收到回调时根据code去换取accessToken,接下来我会用postman模拟客户端发起一个http请求去换取token
    不知道为什么在手机浏览器上看回调至百度的图片在平台显示违规,这里我放一张另一个回调地址的图片替代

    7. 根据code换取AccessToken

    请求/oauth2/token接口

    1. 设置Basic Auth

    之前客户端设置的认证方式是CLIENT_SECRET_BASIC,所以需将客户端信息添加至请求头

    2. 添加表单数据,发起POST请求

    下列表单数据可添加至form-data也可添加至url params

    参数中的code就是第6步回调时携带的code
    注意:添加url params时redirect_uri参数要经过encodeURIComponent函数对回调地址进行编码

    在新版本的sas(1.2.1)中获取token更新了授权码校验逻辑,只能用form-data传递参数,使用url-params会失败,原因见issue1451
    对应的 commit 在这里: Fix to ensure endpoints distinguish between form and query parameters

    8. 参数解释

    1. client_id: 客户端的id
    2. client_secret: 客户端秘钥
    3. redirect_uri:申请授权成功后的回调地址
    4. response_type:授权码模式固定参数code
    5. code_verifier:一段随机字符串
    6. code_challenge:根据指定的加密方式将code_verifier加密后得到的字符串
    7. code_challenge_method:加密方式
    8. scope:客户端申请的授权范围
    9. state:跟随authCode原样返回,防止CSRF攻击
    10. grant_type:指定获取token 的方式:
    	1. refresh_token:刷新token
        2. authorization_code:根据授权码模式的授权码获取
        3. client_credentials:客户端模式获取
    

    总结

    本篇文章从0到1搭建了一个简单认证服务,解释了认证服务的各项配置用意,如何设置自己的登录页和授权确认页,如何让认证服务解析请求时携带的token,文章过长难免有遗漏的地方,如果文章中有遗漏或错误的地方请各位读者在评论区指出。

转载请说明出处内容投诉
CSS教程_站长资源网 » Spring Authorization Server入门 (二) Spring Boot整合Spring Authorization Server

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买
ICP备案号:蜀ICP备2023023382号

Powered By Z-BlogPHP 1.7.3