SSO 、JWT令牌登录

单点登录SSO:

全称Single Sign On,简称就是SSO

在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统

 

同域名下的SSO:

一个企业一般情况下只有一个域名,通过二级域名区分不同的系统。

以京东为例:

这是jd的主页: jd.com

这是jd的帮助中心服务 help.jd.com

这是京东会员页面: vip.jd.com

sso登录以后,可以将Cookie的域设置为顶域,即.a.com,这样所有子域的系统都可以访问到顶域的cookie。我们在设置cookie时,只能设置顶域和自己的域,不能设置其他的域。这样就能解决cookie的问题

我们再来看看session的问题。我们在sso系统登录了,这时再访问app1, Cookie也带到了app1的服务端(Server),app1的服务端怎么找到这个Cookie对应的Session呢?这 里就要把3个系统的Session共享,如图所示。共享Session的解决方案有很多,例如:SpringSession。 这样第2个问题也解决了。

 

 

基于token的认证

就是解决不同域名下的单点登录

最近几年由于单页appweb APIs等的兴起,基于token的身份验证开始流行。当我们谈到利用token进行认证,我们一般说的就是利用JSON Web TokensJWTs)进行认证。虽然有不同的方式来实现

token,事实上,JWTs 已成为标准。因此在本文中将互换tokenJWTs。 基于token的身份验证是无状态的,服务器不需要记录哪些用户已经登录或者哪些JWTs已经处理。每个 发送到服务器的请求都会带上一个token,服务器利用这个token检查确认请求的真实性。 这里可以把token理解成一张演唱会的门票。服务器(演唱会主办方)每次只需要检查你这张门票的有效 性,不需要知道你这张门票是在哪里买的,从谁买的,什么时候买的等等。不同等级的门票可以坐的位置不同,同样的,权限不同的用户可以进行的操作也不同。

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
单点登录SSO)是一种身份认证技术,允许用户在多个应用程序或系统中使用同一组凭据进行登录。Python实现SSO单点登录可以使用多种方式,其中一种常用的方式是使用JSON Web Token(JWT)。 以下是一个简单的Python实现SSO单点登录的步骤: 1. 安装所需库 使用pip安装flask和pyjwt库,这两个库分别用于实现Web应用程序框架和JWT令牌生成和验证。 ``` pip install flask pyjwt ``` 2. 创建身份认证服务器 创建一个Flask应用程序作为身份认证服务器。该应用程序将处理用户登录JWT令牌的生成。 ```python from flask import Flask, request, jsonify import jwt app = Flask(__name__) @app.route('/login', methods=['POST']) def login(): # 在此处验证用户名和密码 # 如果验证通过,则生成JWT令牌并返回给客户端 payload = {'username': 'user123'} token = jwt.encode(payload, 'secret', algorithm='HS256') return jsonify({'token': token.decode('UTF-8')}) if __name__ == '__main__': app.run() ``` 在上面的代码中,'login'路由用于处理用户登录请求。如果用户名和密码验证通过,则生成JWT令牌并返回给客户端。 3. 集成SSO到应用程序 在需要实现SSO的应用程序中,需要验证用户的JWT令牌并授予访问权限。 ```python from flask import Flask, request, jsonify import jwt app = Flask(__name__) @app.route('/protected', methods=['GET']) def protected(): # 验证JWT令牌 token = request.headers.get('Authorization') try: payload = jwt.decode(token, 'secret', algorithms=['HS256']) return jsonify({'message': 'Access granted for user ' + payload['username']}) except jwt.ExpiredSignatureError: return jsonify({'message': 'Token has expired'}) except jwt.InvalidTokenError: return jsonify({'message': 'Invalid token'}) if __name__ == '__main__': app.run() ``` 在上面的代码中,'protected'路由用于保护需要授权用户才能访问的资源。它从请求头中获取JWT令牌并验证它。如果令牌有效,则授权用户访问资源。 4. 集成登录页面 在需要实现SSO的应用程序中,需要提供一个登录页面,使用户能够登录并获得JWT令牌。 ```html <!DOCTYPE html> <html> <head> <title>Login Page</title> </head> <body> <h1>Login Page</h1> <form action="/login" method="POST"> <label for="username">Username:</label> <input type="text" id="username" name="username"><br><br> <label for="password">Password:</label> <input type="password" id="password" name="password"><br><br> <input type="submit" value="Login"> </form> </body> </html> ``` 在上面的代码中,登录表单将向'login'路由提交用户名和密码。如果验证通过,则将JWT令牌返回给客户端,否则显示错误消息。 以上是一个简单的Python实现SSO单点登录的步骤。需要注意的是,这只是一个基本实现,还需要考虑安全性和其他方面的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值