準備把應用發布到蘋果商店,坑爹的要用蘋果登陸。
使用蘋果id在手機應用上登陸會得到兩個東西,乙個是code,乙個是token。
強烈建議大家不要用這個玩意,每天只能登陸一次,真的很難除錯,如果用了這一次機會,就只能等第二天再除錯了。
需要準備的包:requests, pyjwt,cryptography(pyjwt使用es256加密方式時需要)
直接上**了:
team_id =
''bundle_id =
''key_file =
alg =
'es256'
kid =
'kdkdkdafdk'
code_url =
grand_type =
'authorization_code'
aud_url =
aud_ws =
validity_period =
180day_second =
86400
header =
payload =
private_key =
open
(key_file)
.read(
) client_sec = jwt.encode(payload=payload, key=private_key, algorithm=alg, headers=header)
.decode(
'utf-8'
) post_data =
login_req = requests.post(url=code_url, data=post_data)
.json(
)
到這裡和伺服器的互動就完成了,需要注意的以下幾個方面:
1、key的讀取直接讀取就行,不需要把裡面的部分拿出來作為key。
2、post_data裡面的code就是authorizationcode了。
得到如下這些東西:
使用者的id就在這個id_token裡,這也是乙個jwt資料,需要進行解密,其實就是前端能夠獲得到的token。最關鍵的是大家注意一下access_token後面那句話currently, no data set has been defined for access。搞到這裡我只能說呵呵了。
這個token是乙個jwt資料,廢話少說直接上**。
from jwt.algorithms import rsaalgorithm
token_url =
defdecode_jwt
(data)
:# 從蘋果那裡拿公鑰
key_req = requests.get(token_url)
.json(
)# 從data那裡拿到token的加密方式
head = jwt.get_unverified_header(data)
token_key = head[
'kid'
]# 找到相對應的公鑰,一般會發布多個公鑰
for pub_key in key_req[
'keys']:
if pub_key[
'kid'
]== token_key:
key_core = ******json.dumps(pub_key)
# 打包公鑰
key = rsaalgorithm.from_jwk(key_core)
alg = pub_key[
'alg'
]break
else
:print
('unable to find public key'
)return
none
# 使用公鑰來解密
claims = jwt.decode(data, key=key, verify=
true
, algorithms=
[alg]
, audience=bundle_id)
return claims
解出來的的資料如下,其中sub就是使用者的標識。
其實sub在前端是可以直接得到的,但是用後端驗證的方式可以提高安全性。
解token的**也可以用來解密code方法裡的的id_token。
python的selenium實現自動登陸
知道思想,參考其他文件,python的request模組和selenium模組都可以實現get cookie 和 add cookie 的功能。由於現在在學習selenium自動化測試,我選用selenium的webdriver來實現。from selenium import webdriver i...
python3 selenium實現自動登陸網頁
pycharm最好安裝專業版的,從網上搜尋 pycharm註冊碼 可以獲取到很多破解方式 pycharm安裝好後,在file檔案中找到settings.開啟後,在project pycharm中的project interpreter中找到新增,如圖所示。開啟後,搜尋 selenium 然後點選安裝...
Python程式設計 Django中介軟體實現登陸驗證
django請求處理圖 當然可以使用裝飾器,不過不利於維護,還是妥妥的使用中介軟體 設定 setting.py middleware mymiddlewares.accessauthmiddleware 放行url,不進行登入驗證 exclude url login 使用者名稱密碼 users us...