spring seccurity OAuth 2.0授权服务器工作流程

一、客户端配置:在configure(ClientDetailsServiceConfigurer clients)方法中,配置了一个客户端,包括客户端标识符、客户端秘密、授权类型、授权范围和令牌有效期等信息。这个客户端表示某个应用程序或服务,它将向授权服务器请求访问令牌。

二、请求授权码:客户端应用程序首先将用户重定向到授权服务器的授权端点(通常是/oauth/authorize),并在请求中包含客户端标识符、授权类型和授权范围等信息。用户登录并授权客户端访问其受保护的资源。

三、颁发授权码:一旦用户同意授权,授权服务器将生成一个授权码,并将用户重定向回客户端应用程序的重定向URI,同时附带授权码作为查询参数。

四、使用授权码获取令牌:客户端应用程序收到授权码后,将向授权服务器的令牌端点(通常是/oauth/token)发送请求,以交换授权码和访问令牌。请求中包含了客户端标识符、客户端秘密、授权类型(authorization_code)、授权码和重定向URI。

五、颁发访问令牌:授权服务器验证客户端的身份和授权码的有效性,如果一切正常,将颁发访问令牌和可选的刷新令牌。访问令牌用于访问受保护的资源,而刷新令牌用于在访问令牌过期时获取新的访问令牌。

六、使用访问令牌:客户端应用程序可以使用访问令牌向资源服务器请求受保护资源。在每个请求中,客户端应用程序将访问令牌包含在请求头或请求参数中,资源服务器将验证令牌的有效性,然后允许或拒绝对资源的访问。

七、刷新访问令牌:如果访问令牌过期,客户端可以使用刷新令牌向授权服务器请求新的访问令牌,而无需用户的介入。

c 复制代码
http://localhost:8080/oauth/authorize?response_type=code&client_id=your_client_id&redirect_uri=/oauth2/callback&scope=read

http://localhost:8080/oauth/authorize?response_type=code&client_id=your_client_id&redirect_uri=https://www.baidu.com/&scope=read

curl -X GET "http://localhost:8080/oauth/authorize?response_type=code&client_id=your_client_id&redirect_uri=your_redirect_uri&scope=read" 
c 复制代码
http://127.0.0.1:8080/oauth/token?code=IgSNpO&grant_type=authorization_code&client_id=your_client_id&client_secret=client_secret

curl --location --request POST 'http://127.0.0.1:8080/oauth/token?code=fwu1Up&grant_type=authorization_code&redirect_uri=%2Foauth2%2Fcallback' \
--header 'Authorization: Basic eW91cl9jbGllbnRfaWQ6Y2xpZW50X3NlY3JldA==' \
--header 'Cookie: JSESSIONID=C68EE76E15256295E4B8B4A98DF54895'
bash 复制代码
进行oauth2认证前,必须先经过Spring Security的认证。
相关推荐
阿挥的编程日记15 小时前
基于SpringBoot的高校(学生综合)服务平台的设计与实现
java·spring boot·后端·spring·mybatis
爱吃烤鸡翅的酸菜鱼19 小时前
从数据库直连到缓存预热:城市列表查询的性能优化全流程
java·数据库·后端·spring·个人开发
心勤则明1 天前
Spring AI 会话记忆实战:从内存存储到 MySQL + Redis 双层缓存架构
人工智能·spring·缓存
Zz_waiting.1 天前
Spring 原理
java·spring·spring自动管理
烙印6011 天前
Spring容器的心脏:深度解析refresh()方法(上)
java·后端·spring
我真的是大笨蛋1 天前
Redis的String详解
java·数据库·spring boot·redis·spring·缓存
七七七七071 天前
【Linux 系统】打开文件和文件系统
linux·运维·spring
sg_knight1 天前
Spring Cloud与RabbitMQ深度集成:从入门到生产级实战
java·spring boot·spring·spring cloud·消息队列·rabbitmq·stream
Bug退退退1231 天前
Java 网络流式编程
java·服务器·spring·sse
默默coding的程序猿2 天前
1.单例模式有哪几种常见的实现方式?
java·开发语言·spring boot·spring·单例模式·设计模式·idea