sso实现代码
时间: 2023-10-26 11:11:14 浏览: 46
SSO(Single Sign-On)是指单点登录,它允许用户使用一个账号和密码登录多个不同的应用程序。下面是一个简单的SSO实现代码示例,供参考:
1. SSO服务器端代码
```python
from flask import Flask, request, session, redirect, url_for, jsonify
app = Flask(__name__)
app.secret_key = "sso-secret-key"
@app.route("/login", methods=["POST"])
def login():
username = request.form.get("username")
password = request.form.get("password")
if username == "user1" and password == "pass1":
session["username"] = username
return jsonify({"status": "success"})
else:
return jsonify({"status": "error", "message": "Invalid username or password"})
@app.route("/logout")
def logout():
session.pop("username", None)
return redirect(url_for("index"))
@app.route("/sso")
def sso():
username = session.get("username")
if username:
return jsonify({"status": "success", "username": username})
else:
return jsonify({"status": "error", "message": "Not logged in"})
if __name__ == "__main__":
app.run()
```
2. SSO客户端代码
```python
import requests
from flask import Flask, session, redirect, url_for
app = Flask(__name__)
app.secret_key = "sso-client-secret-key"
SSO_SERVER_URL = "http://localhost:5000"
@app.route("/")
def index():
username = session.get("username")
if username:
return f"Hello, {username}!"
else:
return redirect(url_for("login"))
@app.route("/login")
def login():
return f"""
<form method="POST" action="{SSO_SERVER_URL}/login">
<input type="text" name="username" placeholder="Username"><br>
<input type="password" name="password" placeholder="Password"><br>
<button type="submit">Login</button>
</form>
"""
@app.route("/logout")
def logout():
session.pop("username", None)
return redirect(url_for("index"))
@app.before_request
def sso_login():
if "username" not in session:
sso_response = requests.get(f"{SSO_SERVER_URL}/sso")
if sso_response.status_code == 200 and sso_response.json()["status"] == "success":
session["username"] = sso_response.json()["username"]
if __name__ == "__main__":
app.run()
```
在这个示例中,SSO服务器和SSO客户端都是使用Flask框架实现的。当用户访问客户端应用程序时,客户端应用程序会先检查用户是否已经登录过,如果没有登录,则会向SSO服务器发送请求以获取当前登录状态。如果用户已经登录,则客户端应用程序会继续处理用户请求,否则客户端应用程序会重定向用户到SSO服务器以进行登录。