oauth过滤login_Oauth2认证模式之授权码模式实现

Oauth2认证模式之授权码模式(authorization code)

本示例实现了Oauth2之授权码模式,授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动。

阅读本示例之前,你需要先有以下两点基础:

需要对spring security有一定的配置使用经验,用户认证这一块,spring security oauth2建立在spring security的基础之上

oauth2开放授权标准基础,可以稳步到OAuth2 详解,浏览下授权码模式,理解下基本概念

概述

实现 oauth2,可以简易的分为三个步骤

配置资源服务器

配置认证服务器

配置spring security

代码实现

1.pom.xml添加maven依赖

org.springframework.security.oauth

spring-security-oauth2

2.3.6.RELEASE

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-thymeleaf

2.配置资源服务器

public class ResourceServerConfig {

private static final String RESOURCE_ID = "account";

@Configuration

@EnableResourceServer()

protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {

@Override

public void configure(ResourceServerSecurityConfigurer resources) {

resources.resourceId(RESOURCE_ID).stateless(true);

}

@Override

public void configure(HttpSecurity httpSecurity) throws Exception {

httpSecurity

.requestMatchers()

// 保险起见,防止被主过滤器链路拦截

.antMatchers("/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OAuth2 是一个授权框架,可以用于实现单点登录。下面是一个使用 OAuth2 实现单点登录的示例代: 1. 创建一个 OAuth2 服务器 ```python from flask import Flask from flask_oauthlib.provider import OAuth2Provider app = Flask(__name__) oauth = OAuth2Provider(app) # 定义客户端和用户数据 clients = { 'client_id': 'client_secret' } users = { 'user_id': 'password' } # 定义授权请求 @oauth.clientgetter def get_client(client_id): return clients.get(client_id) # 定义用户密验证 @oauth.usergetter def get_user(username, password, *args, **kwargs): if users.get(username) == password: return {'id': username} # 定义授权逻辑 @oauth.authorize_handler def authorize(client_id, response_type, redirect_uri, *args, **kwargs): # 判断用户是否已经登录 user = kwargs.get('user') if user: return True else: # 重定向到登录页面 return redirect('/login') # 定义令牌生成逻辑 @oauth.tokengetter def get_token(access_token=None, refresh_token=None): # 返回访问令牌和刷新令牌 return access_token, refresh_token if __name__ == '__main__': app.run() ``` 2. 创建一个客户端应用 ```python from flask import Flask, request from flask_oauthlib.client import OAuth2Client app = Flask(__name__) oauth = OAuth2Client(app) # 定义授权逻辑 @app.route('/login') def login(): # 获取授权 redirect_uri = request.host_url + 'callback' return oauth.authorize_redirect(redirect_uri=redirect_uri) # 定义回调逻辑 @app.route('/callback') def callback(): # 获取访问令牌和刷新令牌 redirect_uri = request.host_url + 'callback' return oauth.authorized_response(redirect_uri=redirect_uri) if __name__ == '__main__': app.run() ``` 3. 创建一个受保护的资源 ```python from flask import Flask from flask_oauthlib.provider import OAuth2Provider app = Flask(__name__) oauth = OAuth2Provider(app) # 定义客户端和用户数据 clients = { 'client_id': 'client_secret' } users = { 'user_id': 'password' } # 定义授权请求 @oauth.clientgetter def get_client(client_id): return clients.get(client_id) # 定义用户密验证 @oauth.usergetter def get_user(username, password, *args, **kwargs): if users.get(username) == password: return {'id': username} # 定义授权逻辑 @oauth.authorize_handler def authorize(client_id, response_type, redirect_uri, *args, **kwargs): # 判断用户是否已经登录 user = kwargs.get('user') if user: return True else: # 重定向到登录页面 return redirect('/login') # 定义令牌生成逻辑 @oauth.tokengetter def get_token(access_token=None, refresh_token=None): # 返回访问令牌和刷新令牌 return access_token, refresh_token # 定义受保护的资源 @app.route('/protected') @oauth.require_oauth('email') def protected(): # 获取用户信息 user = request.oauth.user return 'Hello, {}!'.format(user['email']) if __name__ == '__main__': app.run() ``` 以上是一个简单的 OAuth2 单点登录示例代,仅供参考。实际应用中需要根据具体需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值