博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Spring Boot构建独立的OAuth服务器(三)
阅读量:5789 次
发布时间:2019-06-18

本文共 5345 字,大约阅读时间需要 17 分钟。

hot3.png

在 中配置了一个独立的OAuth服务器,这里要对Resource,即需要保护的API进行配置,使其在被访问的时候,可以与OAuth服务器通信,根据Access Token获取相关授权信息。

下面会分别讲一下使用Spring MVC和Spring Boot这两种框架时的配置方法。

Spring MVC

  1. 在pom.xml中配置依赖项和插件
    3.2.13.RELEASE
    2.0.0.RELEASE
    2.5
    1.9.13
    org.springframework
    spring-context
    ${spring.version}
    org.springframework
    spring-webmvc
    ${spring.version}
    org.springframework
    spring-jdbc
    ${spring.version}
    org.springframework
    spring-context
    ${spring.version}
    org.springframework
    spring-aop
    ${spring.version}
    org.springframework
    spring-core
    ${spring.version}
    org.codehaus.jackson
    jackson-core-asl
    ${jackson.version}
    org.codehaus.jackson
    jackson-mapper-asl
    ${jackson.version}
    org.springframework.security.oauth
    spring-security-oauth2
    ${spring.oauth.version}
    org.apache.tomcat.maven
    tomcat7-maven-plugin
    2.0
    /
    8081

     

  2. 添加spring-mvc.xml,配置MVC功能
    application/json; charset=UTF-8

     

  3. 添加spring-security.xml,配置OAuth保护,使所有API只有角色为ROLE_USER的用户才能访问,注意create-session要设置为stateless,并且配置OAuth服务器连接信息(checkTokenEndpointUrl,clientId和clientSecret)

     

  4. 编写受保护的Controller,返回结果为用户名
    @Controllerpublic class AuthorizedController {    @RequestMapping(value = "/user", produces = "application/json; charset=UTF-8")    @ResponseBody    public Map
    user(Authentication auth) { Map
    result = new HashMap
    (); result.put("username", auth.getPrincipal()); return result; }}

     

Spring Boot

  1. 在pom.xml中配置依赖项和插件
    org.springframework.boot
    spring-boot-starter-web
    org.springframework.security.oauth
    spring-security-oauth2
    org.springframework.boot
    spring-boot-maven-plugin

     

  2. 在application.properties中配置OAuth服务器信息(security.oauth2.resource.token-info-uri,security.oauth2.client.client-id和security.oauth2.client.client-secret)
    server.port=8081security.oauth2.resource.token-info-uri=http://localhost:8080/oauth/check_tokensecurity.oauth2.client.client-id=client1security.oauth2.client.client-secret=secret1

     

  3. 编写主类Application,启用Resource服务器功能
    @SpringBootApplication@EnableResourceServerpublic class Application {	public static void main(String[] args) {		SpringApplication.run(Application.class, args);	}}

     

  4. 编写Resource服务器配置类,使所有API只有角色为ROLE_USER的用户才能访问
    @Configurationpublic class ResourceConfig extends ResourceServerConfigurerAdapter {    @Override    public void configure(HttpSecurity http) throws Exception {        http.antMatcher("/**").authorizeRequests().anyRequest().access("hasAuthority('ROLE_USER')");    }}

     

测试方法

  1. 启动OAuth服务器
  2. 使用Maven运行Goal:Spring MVC为clean compile tomcat7:run,Spring Boot为clean spring-boot:run
  3. 直接访问http://127.0.0.1:8081/user,会得到如下结果
    {    "error": "unauthorized",    "error_description": "Full authentication is required to access this resource"}

     

  4. 携带Access Token去访问http://127.0.0.1:8081/user,会得到如下结果,其中user就是申请Access Token时使用的用户名
    {    "username": "user"}

携带Access Token的方法有两种,第一种是使用名为access_token的参数传递过去,如http://127.0.0.1:8081/user?access_token=#ACCESS_TOKEN#,第二种是使用名为Authorization的Header传递过去,Header值的格式为Bearer #ACCESS_TOKEN#,基于安全考虑,推荐使用第二种

注意

使用Spring MVC时,create-session一定要设置为stateless,否则,在第一次访问成功后,短时间内再访问的时候如果不携带Access Token的话也能访问成功,原因是Spring Security会在第一次访问成功后创建一个session来存储授权信息,而使用Spring Boot则没有这个问题

转载于:https://my.oschina.net/u/3707083/blog/1560909

你可能感兴趣的文章
Java架构师面试题系列整理(大全)
查看>>
延伸产业链 中国产粮大省向“精深”问发展
查看>>
消费贷用户70%月收入低于5000元 80、90后是主要人群
查看>>
2018年内蒙古外贸首次突破1000亿元
查看>>
CTOR有助于BCH石墨烯技术更上一层楼
查看>>
被遗忘的CSS
查看>>
Webpack中的sourcemap以及如何在生产和开发环境中合理的设置sourcemap的类型
查看>>
做完小程序项目、老板给我加了6k薪资~
查看>>
java工程师linux命令,这篇文章就够了
查看>>
关于React生命周期的学习
查看>>
webpack雪碧图生成
查看>>
搭建智能合约开发环境Remix IDE及使用
查看>>
Spring Cloud构建微服务架构—服务消费基础
查看>>
RAC实践采坑指北
查看>>
runtime运行时 isa指针 SEL方法选择器 IMP函数指针 Method方法 runtime消息机制 runtime的使用...
查看>>
LeetCode36.有效的数独 JavaScript
查看>>
Scrapy基本用法
查看>>
PAT A1030 动态规划
查看>>
自制一个 elasticsearch-spring-boot-starter
查看>>
【人物志】美团前端通道主席洪磊:一位产品出身、爱焊电路板的工程师
查看>>