init: CasSsoService CAS 5.3 overlay (cas.war via LFS)
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import urllib.request, json, base64, ssl
|
||||
from cryptography.hazmat.primitives.asymmetric import padding as asym_padding
|
||||
from cryptography.hazmat.primitives.serialization import load_pem_public_key
|
||||
|
||||
HOST_HDR = "sso.yunhaixingtong.com"
|
||||
BASE = "http://192.168.10.157:80"
|
||||
|
||||
def req(method, path, data=None, headers=None):
|
||||
h = {"Host": HOST_HDR}
|
||||
if headers: h.update(headers)
|
||||
if data is not None:
|
||||
data = urllib.parse.urlencode(data).encode()
|
||||
h["Content-Type"] = "application/x-www-form-urlencoded"
|
||||
r = urllib.request.Request(BASE+path, data=data, headers=h, method=method)
|
||||
try:
|
||||
resp = urllib.request.urlopen(r, timeout=20)
|
||||
body = resp.read().decode("utf-8","replace")
|
||||
return resp.status, dict(resp.getheaders()), body
|
||||
except urllib.error.HTTPError as e:
|
||||
return e.code, dict(e.headers), e.read().decode("utf-8","replace")
|
||||
|
||||
# 1) 取公钥
|
||||
st, hd, body = req("GET", "/api/public-key")
|
||||
print("=== /api/public-key ===")
|
||||
print("status", st)
|
||||
print("body", body[:600])
|
||||
pk = json.loads(body)["data"]["publicKey"]
|
||||
print("publicKey len", len(pk))
|
||||
print("publicKey head:", pk[:60])
|
||||
|
||||
# 重组为合法 PEM(端点把空白去掉了,补回换行)
|
||||
b64 = pk.replace("-----BEGIN PUBLIC KEY-----","").replace("-----END PUBLIC KEY-----","").replace("-----BEGIN RSA PUBLIC KEY-----","").replace("-----END RSA PUBLIC KEY-----","").replace("\n","").replace(" ","")
|
||||
pem = "-----BEGIN PUBLIC KEY-----\n" + "\n".join(b64[i:i+64] for i in range(0,len(b64),64)) + "\n-----END PUBLIC KEY-----"
|
||||
pub = load_pem_public_key(pem.encode())
|
||||
|
||||
def enc(pt):
|
||||
ct = pub.encrypt(pt.encode("utf-8"), asym_padding.PKCS1v15())
|
||||
return base64.b64encode(ct).decode()
|
||||
|
||||
# 用户名/密码:用已知可登录的 yunhaisch(密码需正确才能成功;若不知道正确密码,可先看错误分支)
|
||||
USERNAME = "yunhaisch"
|
||||
PASSWORD = input("请输入 yunhaisch 的密码(仅本地测试用,不会外发): ").strip()
|
||||
|
||||
euser = enc(USERNAME)
|
||||
epwd = enc(PASSWORD)
|
||||
|
||||
# 2) 登录(不带 service)
|
||||
st, hd, body = req("POST", "/api/login", data={
|
||||
"loginname": euser, "pwd": epwd
|
||||
})
|
||||
print("\n=== POST /api/login (无 service) ===")
|
||||
print("status", st)
|
||||
print("Set-Cookie:", hd.get("Set-Cookie"))
|
||||
print("body", body[:800])
|
||||
try:
|
||||
j = json.loads(body)
|
||||
print(">>> code=", j.get("code"), "msg=", j.get("msg"))
|
||||
print(">>> data.url=", (j.get("data") or {}).get("url"))
|
||||
except Exception as e:
|
||||
print("parse err", e)
|
||||
Reference in New Issue
Block a user