天天看点

OAuth2增强TOKEN_JWT1.JWT简介2.JWT组成部分2.增强TOKEN配置3.授权服务启动

学习地址:

https://www.majiaxueyuan.com/uc/play/65

Oauth2.0的一些简单介绍:

https://blog.csdn.net/qq_28198181/article/details/100523474

目录

1.JWT简介

2.JWT组成部分

2.增强TOKEN配置

3.授权服务启动

1.JWT简介

(白嫖网站)https://baijiahao.baidu.com/s?id=1608021814182894637&wfr=spider&for=pc

JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。

2.JWT组成部分

三个部分组成:

JWT的三个部分如下。JWT头、有效载荷和签名

OAuth2增强TOKEN_JWT1.JWT简介2.JWT组成部分2.增强TOKEN配置3.授权服务启动

JWT头

JWT头部分是一个描述JWT元数据的JSON对象,通常如下所示。

{

"alg": "HS256",

"typ": "JWT"

}

在上面的代码中,alg属性表示签名使用的算法,默认为HMAC SHA256(写为HS256);typ属性表示令牌的类型,JWT令牌统一写为JWT。

最后,使用Base64 URL算法将上述JSON对象转换为字符串保存。

有效载荷

有效载荷部分,是JWT的主体内容部分,也是一个JSON对象,包含需要传递的数据。

签名哈希

签名哈希部分是对上面两部分数据签名,通过指定的算法生成哈希,以确保数据不会被篡改。

JWT的用法

客户端接收服务器返回的JWT,将其存储在Cookie或localStorage中。

此后,客户端将在与服务器交互中都会带JWT。如果将它存储在Cookie中,就可以自动发送,但是不会跨域,因此一般是将它放入HTTP请求的Header Authorization字段中。

Authorization: Bearer

当跨域时,也可以将JWT被放置于POST请求的数据主体中。

为什么使用JWT替换原有TOKEN:JWT可以携带用户自定义信息

2.增强TOKEN配置

1.在https://blog.csdn.net/qq_28198181/article/details/100523474

配置的代码基础上添加增强token的方法

在AuthorizationServerConfig类上进行

// JWT
    @Bean
    public JwtAccessTokenConverter accessTokenJwtConverter() {
        JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter() {
            @Override
            public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
                // 这里的UserName是OpenId
                String username = authentication.getUserAuthentication().getName();
                // 得到用户名,去处理数据库可以拿到当前用户的信息和角色信息(需要传递到服务中用到的信息)
                final Map<String, Object> addToJWTInformation = new HashMap<>();
                JSONObject json = new JSONObject();
                json.put("userId", 1);  //这里直接写死的
                json.put("userName", username); //直接写死的
                addToJWTInformation.put("localUser", json.toJSONString());
                ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(addToJWTInformation);
                OAuth2AccessToken enhancedToken = super.enhance(accessToken, authentication);
                return enhancedToken;
            }
        };
        accessTokenConverter.setSigningKey("yyy-sign-key");// 测试用,资源服务使用相同的字符达到一个对称加密的效果
        return accessTokenConverter;
    }
           

然后在配置授权和令牌点的配置方法中添加这个方法

//定义授权和令牌端点和令牌服务
    public void configure(AuthorizationServerEndpointsConfigurer endpointsConfigurer){
 
        //刷新令牌时需要的认证管理和用户信息来源
        endpointsConfigurer.authenticationManager(authenticationManager()).allowedTokenEndpointRequestMethods(HttpMethod.GET,HttpMethod.POST);
        endpointsConfigurer.authenticationManager(authenticationManager());
        endpointsConfigurer.userDetailsService(userDetailsService());

        //配置增强TOKEN
        endpoints.accessTokenConverter(accessTokenJwtConverter());


    }
           

然后重启启动授权服务

3.授权服务启动

启动后 通过密码形式获得token试试

OAuth2增强TOKEN_JWT1.JWT简介2.JWT组成部分2.增强TOKEN配置3.授权服务启动

可以得到如下:

{
 "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJ1c2VyXzEiLCJzY29wZSI6WyJhbGwiXSwiZXhwIjoxNTY4MTA1MTQ3LCJsb2NhbFVzZXIiOiJ7XCJ1c2VyTmFtZVwiOlwidXNlcl8xXCIsXCJ1c2VySWRcIjoxfSIsImF1dGhvcml0aWVzIjpbIlJPTEVfVVNFUiJdLCJqdGkiOiIzNDQxNGUzMi01Y2VlLTRmNGQtYjFmYy02ZjU5NzFkYTMzYWUiLCJjbGllbnRfaWQiOiJ5eXlfY2xpZW50In0.-FnJ5NIV7O3NMJvPVKyuCmUQnYA-0YBGd33Ye-t8VPc",
 
   "token_type": "bearer",
   
 "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJ1c2VyXzEiLCJzY29wZSI6WyJhbGwiXSwiYXRpIjoiMzQ0MTRlMzItNWNlZS00ZjRkLWIxZmMtNmY1OTcxZGEzM2FlIiwiZXhwIjoxNTY4MTA1NDQ3LCJsb2NhbFVzZXIiOiJ7XCJ1c2VyTmFtZVwiOlwidXNlcl8xXCIsXCJ1c2VySWRcIjoxfSIsImF1dGhvcml0aWVzIjpbIlJPTEVfVVNFUiJdLCJqdGkiOiJiYjU3NjFkYy1lYzYwLTQzOGQtYmEzYS0xNzE5NjIzYWExNTIiLCJjbGllbnRfaWQiOiJ5eXlfY2xpZW50In0.uo8v4NkwngdQBVkelsLmQ13307jLWUDAe05jZWXMzsM",
 
  "expires_in": 6899,
  
  "scope": "all",
  
  "localUser": "{\"userName\":\"user_1\",\"userId\":1}",

    "jti": "34414e32-5cee-4f4d-b1fc-6f5971da33ae"
}
           

第一个是获取的token值

第二个是token的类型,一般都是bearer

第三个是可以刷新token的

第四个是token存在的时间 秒单位

第四个是授权作用域

第五个附加信息的json串 这里附带了用户信息

第六个是JWT ID用于标识该JWT

通过该TOKNE去访问资源服务器:

(token访问资源服务器:https://blog.csdn.net/qq_28198181/article/details/100669548)

OAuth2增强TOKEN_JWT1.JWT简介2.JWT组成部分2.增强TOKEN配置3.授权服务启动

可以看到是访问到了资源服务的方法的

以上

继续阅读