zoukankan      html  css  js  c++  java
  • OAuth2.0简单示例

    OAuth2.0

    OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。客户端来申请资源,资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。也就是说,OAuth 的核心就是向第三方应用颁发令牌。而且,OAuth 2.0 规定了四种获得令牌的流程。你可以选择最适合自己的那一种,向第三方应用颁发令牌。

    具体的OAuth学习建议仔细研读阮一峰的教程,

    下面我们来使用spring cloud security 和 spring cloud oauth2两个组件来简单实现授权流程。

    授权服务

    下面我们来使用spring cloud security 实现一个授权服务,首先来引入依赖:

    file

    除了一个web组件,只引入了一个spring-cloud-starter-oauth2,这是因为spring cloud下的oauth2组件已经包含了security:

    file

    首先写一个正常的登录功能,application配置文件和启动类都不用增加特殊配置,主要来配置security配置类:

    file

    这里面基本没有特殊的配置,都是前面遇到过的熟悉的配置。有了这个配置类,基本的登录功能就有了,要想有授权功能,还需要一个授权配置类,授权配置类需要继承 AuthorizationServerConfigurerAdapter 类,并引入 @EnableAuthorizationServer 注解:

    file

    首先配置一个客户端:

    file

    然后配置token的存储和管理,此处使用secret作为秘钥,后面会介绍使用非对称加密的方式 :

    file

    上面的token存储在了内存中,token也可以存储在数据库或者redis中。最后配置授权端点的访问控制:

    file

    以上就是一个简答的授权服务。

    资源服务

    下面来搭建一个资源服务,其实授权和资源服务是可以合二为一的,此处为了清晰,将它们分开。pom中引入的依赖和授权服务是一样的,同样,配置文件和启动类不需要做特殊配置。首先来写两个简单的接口,一个定义为受保护,另一个不受保护:

    file

    然后定义一个资源服务配置类,需要继承 ResourceServerConfigurerAdapter 类,并引入 @EnableResourceServer 注解:

    file

    首先来看令牌验证的配置:

    file

    然后来看接口资源的拦截规则:

    file

    save开头的可以直接访问,不会被拦截,/user/save接口会被验证。

    注意上面配置的clientId和secret都是单一的配置死的,如果需要对多客户端动态进行认真,需要重写,后面是通过http调用的方式解析访问令牌(主要是通过访问授权服务的/oauth/check_token解析)。

    测试

    我们来根据前面说到的流程测试,首先向授权服务申请一个授权码:

    访问首先会跳转到登录页面:

    file

    输入配置中默认的用户名密码登录,然后进入下一个页面:

    file

    这个页面是真正的授权页面,选择Approve,点击按钮,同意授权,授权码会通过回调地址获取,如下图:

    file

    然后携带授权码申请访问令牌,需要访问下面的地址(需要使用post方式):

    将授权码替换上面地址中的授权码三个字,然后在postman中访问:

    file

    其返回结果中,包含access_token参数,就是我们需要的访问令牌,token_type 参数说明了令牌的类型,一般类型为bearer或者refresh_token可以在访问令牌过期后向授权服务申请新的令牌,expires_in参数是令牌的有效时间,单位是秒,图中显示默认是12个小时。令牌已经得到了,下面来访问资源接口,首先试一下不受保护的资源:

    file

    可以看到直接就能访问,然后访问受保护的资源接口:

    file

    得到这样的结果说明该接口需要认证,我们来使用我们前面得到的令牌来访问,首先选择正确的认真协议:

    file

    然后在右侧填写前面获取的access_token:

    file

    然后访问接口,就能看到受保护的资源通过令牌可以访问:

    file

    代码地址 : https://gitee.com/blueses/spring-boot-security 15 和 16

  • 相关阅读:
    POJ 3258 (NOIP2015 D2T1跳石头)
    POJ 3122 二分
    POJ 3104 二分
    POJ 1995 快速幂
    409. Longest Palindrome
    389. Find the Difference
    381. Insert Delete GetRandom O(1)
    380. Insert Delete GetRandom O(1)
    355. Design Twitter
    347. Top K Frequent Elements (sort map)
  • 原文地址:https://www.cnblogs.com/smallfa/p/15151291.html
Copyright © 2011-2022 走看看