SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)

这篇具有很好参考价值的文章主要介绍了SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

3)OAuth2 Client 结合GitHub授权案例

本随笔说明:这仅作为OAuth2 Client初次使用的案例,所以写得很简单,有许多的不足之处。

OAuth2 Client(OAuth2客户端)是指使用OAuth2协议与授权服务器进行通信并获取访问令牌的应用程序或服务。OAuth2客户端代表最终用户(资源拥有者)向授权服务器请求授权,并使用授权后的访问令牌来访问受保护的资源服务器。

OAuth2客户端的主要任务是与授权服务器进行身份验证和授权流程,以获取访问令牌。这样,它可以使用该令牌来向资源服务器发出请求,获取和操作受保护的资源。

OAuth2客户端通常包含以下功能和组件:

  1. 客户端凭据(Client Credentials):OAuth2客户端必须拥有一个唯一的客户端凭据,包括客户端ID和客户端密钥(或密码)。这些凭据用于在与授权服务器进行通信时进行身份验证和授权。

  2. 授权请求:OAuth2客户端向授权服务器发送授权请求,包括请求的权限范围和重定向URL。它会提供自己的客户端凭据以进行身份验证。

  3. 授权回调处理:OAuth2客户端需要能够接收和处理来自授权服务器的授权回调。这是授权服务器将授权码或访问令牌传递回客户端的方式。

  4. 访问令牌的管理:OAuth2客户端负责管理访问令牌的获取、刷新和失效。它应该能够安全地存储和使用

3.1 GitHub设置

官方文档:https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app

  1. 点击自己头像/进入Settings/ 进入Developer settings(左边导航栏最下面)/ 进入OAuth Apps;然后注册新应用程序

    SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)

  2. 注册新应用程序

    第一步:

    SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)

    值得注意的是,如果回调地址不是/login/oauth2/code/*,仅仅是回调失败,但是授权会成功。其次就是在spring security中/login/oauth2/code是固定的,而/github是自己指定的,即最后一个是动态的。

    从spring security源码中可以看出,回调地址的固定写法:

    public class OAuth2LoginAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
        public static final String DEFAULT_FILTER_PROCESSES_URI = "/login/oauth2/code/*";
        private static final String AUTHORIZATION_REQUEST_NOT_FOUND_ERROR_CODE = "authorization_request_not_found";
        private static final String CLIENT_REGISTRATION_NOT_FOUND_ERROR_CODE = "client_registration_not_found";
        private ClientRegistrationRepository clientRegistrationRepository;
        private OAuth2AuthorizedClientRepository authorizedClientRepository;
        private AuthorizationRequestRepository<OAuth2AuthorizationRequest> authorizationRequestRepository;
        private Converter<OAuth2LoginAuthenticationToken, OAuth2AuthenticationToken> authenticationResultConverter;
    
        public OAuth2LoginAuthenticationFilter(ClientRegistrationRepository clientRegistrationRepository, OAuth2AuthorizedClientService authorizedClientService) {
            this(clientRegistrationRepository, authorizedClientService, "/login/oauth2/code/*");
        }
        //省略.....
    }    
    

    第二步:点击Register application后就会跳转到如下界面,这时可以创建密钥(必须)和上传应用logo(非必须)

    创建密钥时需要输入密码,得到密钥后请妥善保存,更新信息后密钥就不再显示

    在更新前可以将ClientIDClient secrets以及 回调URL 保存一下,等下会用到

    SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)

3.2 开始编码

创建一个基本的springboot项目,我这里的spring boot版本是:2.7.11,所以spring security的版本是5.7以上的,可能存在语法差异

  1. spring security和oauth2 client的maven依赖

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!--oauth2-client-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
    
  2. yml配置文件

    spring.security.oauth2.client.registration是固定写法,会有提示,而后面的为自定义内容,不会有提示

    server:
      port: 8080
    
    spring:
      security:
        oauth2:
          client:
            registration:
              github:
                client-id: Client ID # 自己的客户端ID
                client-secret: Client secrets # 自己的密钥
                redirect-uri: 回调URL # 必须和GitHub上填的回调地址一致
    
    
  3. SpringSecurity配置文件

    .oauth2Login()使用oauth2登录认证

    package com.yang.springsecurityoauthclient01.config;
    
    //省略导包
    
    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true,securedEnabled = true,jsr250Enabled = true)
    public class WebSecurityConfig {
    
        @Bean
        SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            return http.authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                    .oauth2Login()  //使用oauth2认证 (需要在配置文件中配置服务,否则可能会启动失败 )
                    .and()
                    .csrf().disable()
                    .build();
        }
    }
    
    
  4. controller 控制层编写

    package com.yang.springsecurityoauthclient01.controller;
    
    //省略导包
    
    @RestController
    public class HelloController {
    
        @GetMapping("/index")
        public String index(){
            return "主页~~~";
        }
        
        /**
         * @return GitHub的授权信息
         */
        @GetMapping("/hello")
        public DefaultOAuth2User hello(){
            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
            return (DefaultOAuth2User) authentication.getPrincipal();
        }
    }
    
    
  5. 最终结果

    访问http://localhost:8080/index,点击GitHub进行授权验证

    SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)

    授权Authorize

    SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)

    访问http://localhost:8080/hello得到授权信息:

    SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)

  6. 撤销用户授权

    撤销授权后重启程序,之前的用户就需要进行重新进行授权了。

    SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)

最后最后需要注意的是,同一个账号在短时间内别试得太多,不然会出现如下情况,解决办法也很简单,等就是了~~~
SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)文章来源地址https://www.toymoban.com/news/detail-436876.html

到了这里,关于SpringSecurity:OAuth2 Client 结合GitHub授权案例(特简单版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringSecurity学习(八)OAuth2.0、授权服务器、资源服务器、JWT令牌的使用

    OAuth2是一个认证协议,SpringSecurity对OAuth2协议提供了响应的支持,开发者可以非常方便的使用OAuth2协议。 简介 四种授权模式 Spring Security OAuth2 GitHub授权登录 授权服务器与资源服务器 使用JWT OAuth是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密资源

    2024年02月02日
    浏览(60)
  • OAuth2.0 实践 Spring Authorization Server 搭建授权服务器 + Resource + Client

    title: OAuth2.0 实践 Spring Authorization Server 搭建授权服务器 + Resource + Client date: 2023-03-27 01:41:26 tags: OAuth2.0 Spring Authorization Server categories: 开发实践 cover: https://cover.png feature: false 目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server ,原先的 Spring Security OAuth 已经停止更新

    2024年02月08日
    浏览(58)
  • 12-SpringSecurity:通过OAuth2集成Github登录,字节跳动网络工程师的面试

    (1) 注册应用 在Github注册一个应用,生成 client-id , client-secret 。 注意这里的Home页: http://localhost:8080 ,以及回调地址: http://localhost:8080/login/oauth2/code/github (2) 配置 application.yml spring: security: oauth2: client: registration: github: client-id: client-secret: (3) 启动应用 为了看到登录

    2024年04月10日
    浏览(52)
  • SpringSecurity+OAuth2.0

    OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。OAuth 在全世界得到广泛应用,目前的版本是 2.0 版。 简单

    2024年02月13日
    浏览(40)
  • SpringSecurity之Oauth2介绍

    第三方认证技术方案最主要是解决 认证协议的通用标准问题 ,因为要实现跨系统认证,各系统之间要遵循一定的接口协议。 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的

    2023年04月09日
    浏览(45)
  • SpringSecurity+Oauth2+JWT

    快速入门 1. 创建基础项目 file == new == project == Spring Initializr ==next == web(Spring Web)、Security(Spring Security) ==一直下一步 2. 编写代码进行测试 创建controller static下创建login.html、main.html 3. 启动项目进行测试 访问http://localhost:8080/login.html 会进入SpringSecurity框架自带的登入页面 用户默认

    2024年02月12日
    浏览(44)
  • SpringSecurity +oauth2获取当前登录用户(二)

    特别注意:以下内容如果访问失败或有其他疑问,可先学习: SpringSecurity +oauth2+JWT实现统一授权和认证及项目搭建(一) 1 获取当前用户的信息代码为: 但是,通过运行会发现principal的值只是 用户名 ,没有用户信息,通过去看源码,才发现问题所在,以下是源码: 源码类:

    2023年04月12日
    浏览(50)
  • SpringSecurity OAuth2 配置 token有效时长

    1.这种方式配置之后,并没有生效 2.第二种方法时改数据库的配置,测试配置有效

    2024年02月09日
    浏览(50)
  • SpringSecurity+ Oauth2.0+JWT 0-1

    AuthorizationServer 需要继承AuthorizationServerConfigurerAdapter AuthorizationServerConfigurerAdapter源码 AuthorizationServerSecurityConfigurer:配置令牌端点(Token Endpoint)的安全约束 ClientDetailsServiceConfigurer:配置OAuth2客户端 AuthorizationServerEndpointsConfigurer:配置授权(authorization)以及令牌(token)的访

    2024年02月07日
    浏览(49)
  • 权限管理 springboot集成springSecurity Oauth2 JWT

    目录 一、SpringSeurity的基础操作 1、引入主要依赖 2、加密器 3、实现自定义登录逻辑 4、访问限制 5、自定义异常处理  6、通过注解的方式配置访问控制 二、Auth2认证方案 1、什么是Auth2认证 2、Oauth2最常用的授权模式  3、依赖引入 4、添加配置类 5、测试 6、存在到Redis里,后续

    2023年04月14日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包