SSO简介
单点登录(Single Sign On)功能是一个非常常用的功能,尤其是我们在多个系统之间需要登录同步的时候,例如我们在登录QQ空间后,再去QQ的其他网站,都是默认登录的状态,这就是单点登录。
单点登录有很多种实现方法,这里介绍一个通过共享session的实现方法。实现共享session要做的就是要让多个不同应用共用同一个session,但是session默认的是每个应用一个独立的session和cookie的,所以这里要对session的存储进行配置。
除了默认的session存储,我也可以设置让session存储在文件、缓存或者数据库中。
如果我们让session存储在一个固定位置或者数据库中,然后我们设置各个应用cookie的domain为父域地址即可实现各个cookie的相同,从而时候各个cookie中存储的sessionID一致。
搭建测试环境
下面我们来创建两个空的Django项目来进行演示,SSO1和SSO2,这里采用pycharm直接创建两个Django项目,也可以在命令行中使用django-admin startproject sso来创建,其中sso是创建的项目名称。这里也可以使用两个完全相同的项目,在不同地址启动,但是为了演示效果,这里创建了2个。

创建好两个项目后,我们要给项目写一个模拟的登录,注销的功能。
在templates文件夹下创建文件login.html文件。这里直接使用之前写过的登录页面的代码,样式就不加了,在SSO1和SSO2中都加入login.html,具体代码为:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><div class="login_content"><div class="page-header" id="page_header"><h1>登录<small>Login</small></h1></div><div id="login_form"><form method="post"><div class="form-group"><label for="exampleInputEmail1">Email address</label><input type="input" class="form-control" name="usr" id="exampleInputEmail1" placeholder="username"></div><div class="form-group"><label for="exampleInputPassword1">密码</label><input type="password" class="form-control" name="password" id="exampleInputPassword1" placeholder="密码"></div><div id="login_butt"><button type="submit" class="btn btn-default">登录</button><button type="button" class="btn btn-default" onclick="">注册</button></div></form></div></div></body></html>
然后在SSO1文件夹创建一个view.py文件,用来存放视图函数。(这里仅为演示SSO,就不分模块了。)
创建文件后的文件目录为:(SSO2项目一样)
.├── SSO1│ ├── __init__.py│ ├── asgi.py│ ├── settings.py│ ├── urls.py│ ├── view.py│ └── wsgi.py├── manage.py├── templates│ └── login.html└── venv├── bin├── include├── lib└── pyvenv.cfg
插入一个小BUG
macbook运行环境,pycharm创建的Django应用有时候初始化有个bug,缺少os库,会报错:

本文介绍了如何使用Django实现单点登录(SSO)。通过共享session和利用Redis,详细阐述了两种SSO的实现方法,包括环境搭建、配置修改和功能测试,展示了SSO在多应用间同步登录状态的实现过程。
最低0.47元/天 解锁文章
438

被折叠的 条评论
为什么被折叠?



