spring security + oauth2.0 + jwt
Switch branches/tags
Nothing to show
Clone or download
Latest commit a497e1e Sep 6, 2018
Permalink
Failed to load latest commit information.
src update/sql scripts Sep 6, 2018
.gitignore add Travis CI Jun 26, 2018
.travis.yml add Travis CI Jun 26, 2018
LICENSE Create LICENSE Jun 28, 2018
README.md stash Sep 1, 2018
docker-compose.yml stash Sep 1, 2018
pom.xml update/sql scripts Sep 6, 2018

README.md

Build Status codebeat badge

change logs

  • 2018.9.1

    版本升到2.0-SNAPSHOT,欲使用sb1.5.x版本,请切换到TAG 1.0-RELEASE。by CANGWU

    Spring Cloud Security 升级到Finchley.RELEASE,Spring Boot由1.5.X升级到2.0.X。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.RELEASE</version>
       </dependency>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
    </parent>

quick start

本次对项目结构进行了更新,token的存储机制基于redis,当然存储方式可以自由切换,Spring Security提供了SPI的多种实现。

客户端的信息还是基于jdbc实现,所以需要导入项目中提供的表oauth_client_details

推荐首先阅读专栏文章:认证鉴权与API权限控制在微服务架构中的设计与实现

单独的整合项目地址为:
GitHub:https://github.com/keets2012/microservice-integration
或者 码云:https://gitee.com/keets/microservice-integration

maintainer

  • keets2012
  • CANGWU

password模式

项目克隆之后:

  1. 安装一下,mvn clean install
  2. 修改Auth项目中的配置文件,写了XXXX的地方,替换成自己的实际地址(redis和mysql)
  3. 数据库导入,sql脚本在项目中。创建auth数据库,运行auth.sql
  4. mvn clean spring-boot:run
  5. 其他细节参考博客
  6. 你的star是对我最好的鼓励^_^

进行请求获取Token授权: head form

笔者自己运行了结果如下:

{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MDkwNzMzMjcsIlgtQU9ITy1Vc2VySWQiOiIxNGY1MmE0OS0yYTgxLTRhMmYtOGI5Mi01ZmU0NzUzZGRmZGEiLCJ1c2VyX25hbWUiOiIxODM2MjkxNjcyNiIsImp0aSI6IjM5NDEzN2I5LTNjZGItNGUyNy04NGRjLWM5YjEyYzk3ZTA4YyIsImNsaWVudF9pZCI6ImZyb250ZW5kIiwic2NvcGUiOlsiYWxsIl19.pGZhGNVECg0b4LB_pYXTTVKjNn8FA5biM04Bhcd-MEE",
    "token_type": "bearer",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiIxODM2MjkxNjcyNiIsInNjb3BlIjpbImFsbCJdLCJhdGkiOiIzOTQxMzdiOS0zY2RiLTRlMjctODRkYy1jOWIxMmM5N2UwOGMiLCJleHAiOjE1MTE2MjIxMjcsIlgtQU9ITy1Vc2VySWQiOiIxNGY1MmE0OS0yYTgxLTRhMmYtOGI5Mi01ZmU0NzUzZGRmZGEiLCJqdGkiOiJkYTBmOTMxMS1lZjc0LTRiMjQtODViZi04ZTNjNDVhNGEyNzkiLCJjbGllbnRfaWQiOiJmcm9udGVuZCJ9.2MRdqEogAwbesRfj2TKoWhMazItBlpjbQx7dlgfFpHE",
    "expires_in": 43199,
    "scope": "all",
    "X-AOHO-UserId": "14f52a49-2a81-4a2f-8b92-5fe4753ddfda",
    "jti": "394137b9-3cdb-4e27-84dc-c9b12c97e08c",
    "X-AOHO-ClientId": "frontend"
}

ps: 登录的用户名密码要在表单里面写,内容随意,因为在代码中已经去掉了对user服务的校验。

授权码模式

本次更新添加了对授权码模式的使用

授权码模式需要用户登录,所以借助浏览器

首先给数据库表中的oauth_client_details表中client_idfrontend的行authorized_grant_types添加authorization_codeweb_server_redirect_uri设置为http://localhost:8080。表示该客户端允许授权码模式以及授权码回调地址为http://localhost:8080

浏览器访问地址

http://localhost:9000/oauth/authorize?response_type=code&client_id=frontend&
scope=all&redirect_uri=http://localhost:8080

进入登录授权页面并同意授权,从回调地址中获取授权码

http://localhost:8080/?code=xGjrTm

通过授权码获取access_token

method: post 
url: http://localhost:9000/oauth/token?grant_type=authorization_code
header:
{
  Authorization: Basic ZnJvbnRlbmQ6ZnJvbnRlbmQ=,
  Content-Type: application/x-www-form-urlencoded
}
body:
{
  code: xGjrTm,
  redirect_uri: http://localhost:8080
}

写在最后

项目整合如果遇到问题,可以加入qq群交流。

有问题联系 aoho002#gmail.com

MIT License

Copyright (c) 2018 aoho