Springboot2.0 + OAuth2.0之授权码模式

综述:上两回讲了密码模式,应该是浅显易懂。如有补充,不足或者是有误之处还请多多指出。现在重头戏,授权码模式开始。

一、具体操作流程

- 用户访问客户端,后者将前者导向认证服务器,认证服务器返回认证页面(账号密码或者其他认证方式)

- 用户选择是否给予客户端授权。

- 假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。

- 客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。

- 认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

二、实践测试

同样是使用上回使用的认证服务器。记得将资源配置注释掉。

(1)在浏览器访问认证服务器获取 code:http://localhost:8001/oauth/authorize?client_id=client&response_type=code&scope=all&redirect_uri=http://www.baidu.com (get), 结果如下:

认证服务器会重定向到 login 页面让用户进行登录授权。此时用户输入用户名和密码进行授权。成功之后认证服务器重定向到指定的 url (这里为 www.baidu.com):

(2)在重定向的 url 后面会带上 code,此时客户端则可以拿这个 code 去换取 token,换取连接:http://localhost:8001/oauth/token?client_id=client&client_secret=123456&grant_type=authorization_code&redirect_uri=http://www.baidu.com&code=AKAQUe (post)

(3)跟上回说的那样,拿到 token 即可访问资源了



问题总结:

(1)Java.io.NotSerializableException Problem (UserDetails的实现类没有实现Serializable接口导致  )

(2)User account is locked   (isAccountNonLocked 属性设置为了false,应该设置为true)

(3)解决Spring Security OAuth在访问/oauth/token时候报401 authentication is required(解决参考:https://blog.csdn.net/u012040869/article/details/80140515)



参考资料:

(1)四中模式概述:https://blog.csdn.net/weixin_42033269/article/details/80086422

(2)userDetailsService:https://www.journaldev.com/2736/spring-security-example-userdetailsservice

(3)spring security Oauth 2.0 authentication server example: https://javadeveloperzone.com/spring-boot/spring-security-oauth-2-0-authentication-server/#26_Demo

(4)OAuth2 tables: https://stackoverflow.com/questions/34170281/spring-boot-oauth2-with-jdbc-token-store-gives-oauth-access-token-relation-doesn

(5)授权码模式:https://blog.csdn.net/qq_27828675/article/details/82466599

(6)Spring Boot OAuth2.0密码模式:https://blog.csdn.net/qq_34873338/article/details/80218212



后续:由此史上最简洁Springboot2.0 + OAuth2.0 暂时告一段落。。。

原文地址:https://www.cnblogs.com/lzj123/p/10279007.html

时间: 2024-11-02 22:32:45

Springboot2.0 + OAuth2.0之授权码模式的相关文章

Oauth2.0认证---授权码模式

目录: 1.功能描述 2.客户端的授权模式 3.授权模式认证流程 4.代码实现 1.功能描述 OAuth在"客户端"与"服务提供商"之间,设置了一个授权层(authorization layer)."客户端"不能直接登录"服务提供商",只能登录授权层,以此将用户与客户端区分开来. "客户端"登录授权层所用的令牌(token),与用户的密码不同.用户可以在登录的时候,指定授权层令牌的权限范围和有效期. 2.客

Microsoft.Owin.Security 自定义AuthenticationHandler 实现oauth2 的授权码模式

三个网站: 1. www.cnblogs.com        用户直接面对和使用的web应用   以后简称w 2.passport.cnblogs.com   认证服务器,可以访问用户表的用户名和密码                             以后简称p 3.users.cnblogs.com        给其它应用程序提供服务,本例当中只是提供授权用户的个人信息,例如手机 邮箱等信息                            以后简称u 利用 Microsoft.

Spring Security OAuth2 授权码模式

 背景: 由于业务实现中涉及到接入第三方系统(app接入有赞商城等),所以涉及到第三方系统需要获取用户信息(用户手机号.姓名等),为了保证用户信息的安全和接入方式的统一, 采用Oauth2四种模式之一的授权码模式.  介绍:        第三方系统调用我方提供的授权接口(步骤1) 用户同意授权,后跳转第三方系统(步骤2.3) 第三方系统获得code,根据code到我方系统获取token(步骤5.6 ) 根据获取token访问受保护的资源(步骤8.9)    实际应用中由于合作商户,所以需要直接

spring-oauth-server实践(1-5)为客户mobile-client开通授权码模式申请access_token,并使用access_token访问需要鉴权的业务

1.为mobile用户申请access_token      access_token存在并有效时,4+1种方式再次申请到的access_token都是一样的,有效期不变!      如果mobile用户想使用[授权码模式],需要修改数据库mobile_client支持的授权方式!      如果使用mobile用户和授权码模式,要手工修改:申请用户mobile,申请客户mobile_client 2.使用得到的access_token直接访问服务提供者       http://localho

授权码模式

1.授权码模式是功能最全.最安全的,其授权过程(如获取微信用户信息): a)用户登陆第三方应用,第三方应用需要获取该用户微信的个人资料 b)第三方把用户链接到微信的授权页面,用户点击授权,此时微信可以确切地知道用户是同意授权了,而不是由第三方应用伪造的同意动作 c)用户在微信的授权页面点击授权后,微信转跳回第三方应用页面并返回授权码,这个转跳回的页面是事先微信和第三方应用商量好的 d)第三方应用拿到授权码后(并不是token),可以去微信请求token,微信检查授权码是否正确,返回token e

OAuth2.0学习(4-12)spring-oauth-server分析 - 授权码模式验证过程

1.发起授权码请求 服务端url:authorization_code 2.服务端验证client_id返回授权码,      客户端,提示 用户User登录 3.服务端验证client_id,提示返回authorization_code 4.客户端接收authorization_code后,转发给了 /oauth/token  4.显示access_token和refresh_token

OAuth 2.0 授权码请求

关于OAuth 2.0,请参见下面这两篇文章(墙裂推荐): <OAuth 2.0> <Spring Security OAuth 2.0> 纸上得来终觉浅,绝知此事要躬行.理论知识了解以后,最终还是要动手实践,不亲自做一遍永远不知道里面有多少坑.本节的重点是用Spring Security实现授权码模式. 1. maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project x

开放授权协议OAuth2.0简介

原文地址: http://stackvoid.com/introduce-to-oath2.0/ 可能你跟我一样,使用过各种第三方开放授权库(如在你的 APP 中获取 QQ 照片或微博评论等)来获取用户的一些资源,今天跟大家总结分享一下开放授权(OAuth2.0,1.0太复杂已经被弃用)的概念和原理,在以后使用开放授权SDK时能快速高效完成. OAuth解决了什么问题? OAuth 产生主要解决了第三方应用访问用户在某网站网络资源的问题.例如,上图中,用户在36氪登陆时,可以用 QQ 来登陆,点

Oltu在Jersey框架上实现oauth2.0授权模块

oltu是一个开源的oauth2.0协议的实现,本人在此开源项目的基础上进行修改,实现一个自定义的oauth2.0模块. 关于oltu的使用大家可以看这里:http://oltu.apache.org/ 项目可以从这里下载:http://mirror.bit.edu.cn/apache/oltu/org.apache.oltu.oauth2/ 项目中我将四种授权方式都做了实现(授权码模式.简化模式.密码模式及客户端模式),但是这里仅以授权码模式为例,服务端采用Jersey框架实现,而客户端采用s