1 Star 0 Fork 21

java/Spring-security-oauth2

forked from shenzhanwang/Spring-jwt 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Spring-security整合OAuth2授权认证协议

  1. 使用@EnableAuthorizationServer配置授权服务器,开启授权认证服务的端点/oauth/authorize、/oauth/token
  2. 使用@EnableResourceServer配置资源服务器,配置需要传token才能调用的接口路径
  3. 使用@EnableGlobalMethodSecurity配置spring security放行所有认证服务端点/oauth/**
  4. token写入redis缓存,过期会自动失效.运行前请先开启redis并导入SQL脚本
  5. 由于使用了password认证,前端发请求时需要先申请token,代码在auth.js中:
function fetchToken(){
	var name = token_storage.getItem('username');
	var pwd = token_storage.getItem('password');
    var data={
        'scope':'server',
        'grant_type':'password',
        'username':"java",
        "password":"1234"
        };
    $.ajax({
       url: "/oauth/token",
       type:"post",
       data:data,
       async: false,
       contentType: 'application/x-www-form-urlencoded',
       beforeSend:function(xhr){
             xhr.setRequestHeader("Authorization", 'Basic ' + BASE64.encode(client_id+':'+client_secret));
        },
       success: function (sResponse) {
        saveAuth(sResponse);
        console.log('fetch_token ok: ' + sResponse.access_token+'  expires_in:'+sResponse.expires_in);
       },
       error:function(a,b,c){
        console.log(a, b, c);
       }
    });
}

如果要刷新token,则:

function refreshToken(){
    var auth = getAuth();
    var data={
            'client_id': client_id,
            'client_secret': client_secret,
            'grant_type':'refresh_token',
            'refresh_token':auth.refresh_token
            };
        $.ajax({
           url: "/oauth/token",
           type:"post",
           data:data,
           async: false,
           contentType: 'application/x-www-form-urlencoded',
           success: function (sResponse) {
            saveAuth(sResponse);
            console.log('refresh_token ok: ' + sResponse.access_token+'  expires_in:'+sResponse.expires_in);
           },
           error:function(a,b,c){
            if (a.status==400 && a.responseJSON.error=='invalid_grant'){
                console.log('refresh token invalid');
                clearAuth();
            }
           }
        });
}

发送请求前,在登录页面使用ajaxSetup()对ajax请求的token初始化并写入localStorage。登录用户名java,密码1234

输入图片说明

如此,则所有请求头都自带token:

输入图片说明

测试password认证,前端需要先发送请求获取token:

输入图片说明 输入图片说明

然后拿着token去拉接口:

输入图片说明

如果token过期就刷新token:

输入图片说明

oauth2的认证流程

输入图片说明 OAauth2.0包括以下角色:

  • 客户端 本身不存储资源,需要通过资源拥有者的授权去请求资源服务器的资源,比如:Android客户端、Web客户端(浏览器端)、微信客户端等。
  • 资源拥有者 通常为用户,也可以是应用程序,即该资源的拥有者。
  • 授权服务器(也称认证服务器)用于服务提供商对资源拥有的身份进行认证、对访问资源进行授权,认证成功后会给客户端发放令牌 (access_token),作为客户端访问资源服务器的凭据。
  • 资源服务器 存储资源的服务器,服务提供商会给准入的接入方一个身份,用于接入时的凭据: client_id:客户端标识 client_secret:客户端秘钥 因此,准确来说,授权服务器对两种OAuth2.0中的两个角色进行认证授权,分别是资源拥有者、客户端。

总之,对于授权码模式,先申请授权码,然后用授权码申请token令牌,然后把token令牌放在请求头拉取其他接口。如果是密码模式,则可以跳过授权码,直接走后面两步。

测试授权码模式

需要先申请授权code:http://localhost:8080/oauth/authorize?response_type=code&client_id=web 输入图片说明

  • 同意授权后,页面地址会返回一个code: 输入图片说明
  • 再拿着code请求token: 输入图片说明
  • 再拿着token去拉接口: 输入图片说明

测试客户端模式

直接取申请token: 输入图片说明

  • 再用token拉接口 输入图片说明

附录:中央技术储备仓库(Central Technique Reserve Repository)

基础篇:职业化,从做好OA系统开始

  1. Spring boot整合Mybatis实现增删改查(支持多数据源)输入图片说明
  2. Struts2,Hibernate,Spring三大框架的整合实现增删改查
  3. Spring,SpringMVC和Hibernate的整合实现增删改查
  4. Spring boot整合activiti工作流引擎实现OA开发输入图片说明
  5. Spring发布与调用REST风格的WebService
  6. Spring boot整合Axis调用SOAP风格的web服务
  7. Spring boot整合Apache Shiro实现RBAC权限控制
  8. 使用Spring security实现RBAC权限控制
  9. Spring整合Jasig CAS框架实现单点登录

中级篇:中间件的各种姿势

  1. Spring boot整合mongoDB文档数据库实现增删改查
  2. Spring连接Redis实现缓存
  3. Spring连接图存数据库Neo4j实现增删改查
  4. Spring boot整合列存数据库hbase实现增删改查
  5. Spring平台整合消息队列ActiveMQ实现发布订阅、生产者消费者模型(JMS)
  6. Spring boot整合消息队列RabbitMQ实现四种消息模式(AMQP)
  7. Spring boot整合kafka 2.1.0实现大数据消息管道
  8. Spring boot整合websocket实现即时通讯输入图片说明
  9. Spring security整合oauth2实现token认证
  10. Spring MVC整合FastDFS客户端实现文件上传
  11. 23种设计模式,源码、注释、使用场景
  12. 使用ETL工具Kettle的实例
  13. Git指南和分支管理策略
  14. 使用数据仓库进行OLAP数据分析(Mysql+Kettle+Zeppelin)

高级篇:架构之美

  1. zookeeper原理、架构、使用场景和可视化
  2. Spring boot整合Apache dubbo v2.7.5实现分布式服务治理(SOA架构) 输入图片说明

包含组件Spring boot v2.2.2+Dubbo v2.7.5+Nacos v1.1.1 效果图

  1. 使用Spring Cloud Alibaba v2.1.0实现微服务架构(MSA架构)输入图片说明

包含组件Nacos+Feign+Gateway+Ribbon+Sentinel+Zipkin 效果图

  1. 使用jenkins+centos+git+maven搭建持续集成环境自动化部署分布式服务
  2. 使用docker+compose+jenkins+gitlab+spring cloud实现微服务的编排、持续集成和动态扩容
  3. 使用FastDFS搭建分布式文件系统(高可用、负载均衡)
  4. 搭建高可用nginx集群和Tomcat负载均衡
  5. 使用mycat实现Mysql数据库的主从复制、读写分离、分表分库、负载均衡和高可用
  6. Spring boot整合Elastic search实现全文检索和大数据分析 输入图片说明

特别篇:分布式事务和并发控制

  1. 基于可靠消息最终一致性实现分布式事务(activeMQ)
  2. Spring boot dubbo整合seata实现分布式事务输入图片说明

包含组件nacos v1.1.0 + seata v0.7.1 +spring boot dubbo v2.7.5 效果图

  1. Spring cloud alibaba v2.1.0整合seata实现分布式事务 输入图片说明

包含组件nacos v1.1.0 + seata v0.7.1 +spring cloud alibaba v2.1.0 效果图

  1. 并发控制:数据库锁机制和事务隔离级别的实现输入图片说明
  2. 并发控制:使用redis实现分布式锁 输入图片说明
  3. 并发控制:使用zookeeper实现分布式锁
  4. 并发控制:Java多线程编程实例
  5. 并发控制:使用netty实现高性能NIO通信

视频教程

输入图片说明

在线观看(含源码和PPT)

空文件

简介

Spring security整合oauth2实现token认证 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/java_classic_project_case/Spring-security-oauth2.git
git@gitee.com:java_classic_project_case/Spring-security-oauth2.git
java_classic_project_case
Spring-security-oauth2
Spring-security-oauth2
master

搜索帮助