Closed szimszon closed 2 years ago
hm, azt authentikáció jó, mert ha hibás jelszót adok meg akkor azt mondja, hogy
{"error":"invalid_grant","error_description":"invalid_username_or_password"}
Az https://" + instID + ".e-kreta.hu/idp/api/v1/Token használatánál ezt a hibaüzenetet kapom:
{"IsException":true,"ExceptionId":"5a3ceaff-79e2-4195-86b3-12231c972979","Type":"SqlException","Message":"CREATE DATABASE permission denied in database 'master'."}
;)
Eddig működött, most én is ezt a hibát kapom. Szerintem megint variáltak valamit.
Megnéztem, hogy a telefonos kréta app hogyan csinálja a dolgokat:
POST /connect/token HTTP/1.1
Host: idp.e-kreta.hu
X-AuthorizationPolicy-Version: v1
X-AuthorizationPolicy-Key: qso1xLkgM1K2ujX2NiWCuPvyRWitioC1O4ItAU1GKXN1lgB060nBD3tm2AkXSSWO2N8yx0YqLSUE3refAcyRMw==
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Connection: keep-alive
X-AuthorizationPolicy-Nonce: OwLOEZCkhmaFLHM8FsQWmA==
Accept: */*
User-Agent: hu.ekreta.student/1.6.1.183403 iPhone13,2 iOS/15.0 CFNetwork/1312 Darwin/21.0.0
Accept-Language: en-GB;q=1.0, hu-HU;q=0.9
Accept-Encoding: br;q=1.0, gzip;q=0.9, deflate;q=0.8
Content-Length: 122
client_id=kreta-ellenorzo-mobile&grant_type=password&institute_code=ISKOLAKÓD&password=JELSZÓ&username=FELHASZNÁLÓ
Ami innen fontos és kell is neki az ez a rész:
X-AuthorizationPolicy-Version: v1
X-AuthorizationPolicy-Key: qso1xLkgM1K2ujX2NiWCuPvyRWitioC1O4ItAU1GKXN1lgB060nBD3tm2AkXSSWO2N8yx0YqLSUE3refAcyRMw==
Az X-AuthorizationPolicy-None
lekéréséhez csak egy GET request kell ide: https://idp.e-kreta.hu/nonce
Viszont ahogyan elnézem ezt nem lehet folyton újra felhasználni.
Az appba való bejelentkezésnél csak ezek a kérelmek futnak le.
Viszont a filc napló kódjában megtaláltam ezt:
Nonce getNonce(BuildContext context, String nonce, String username, String instituteCode) {
Nonce nonceEncoder = Nonce(key: [53, 75, 109, 112, 109, 103, 100, 53, 102, 74], nonce: nonce);
nonceEncoder.encode(username.toLowerCase() + instituteCode.toLowerCase() + nonce);
return nonceEncoder;
}
nonce.dart
:
import 'dart:convert';
import 'package:crypto/crypto.dart';
class Nonce {
String nonce;
List<int> key;
String? encoded;
Nonce({required this.nonce, required this.key});
Future encode(String message) async {
List<int> messageBytes = utf8.encode(message);
Hmac hmac = Hmac(sha512, key);
Digest digest = hmac.convert(messageBytes);
encoded = base64.encode(digest.bytes);
}
Map<String, String> header() {
return {
"X-Authorizationpolicy-Nonce": nonce,
"X-Authorizationpolicy-Key": encoded ?? "",
"X-Authorizationpolicy-Version": "v1",
};
}
}
Csak sajnos nem sikerült még ezt átfordítanom pythonra.
key: [53, 75, 109, 112, 109, 103, 100, 53, 102, 74]
Szép, ez így hardcode-olva? Nagyon nem akarják, hogy más hozzáférjen az api-hoz. :-(
Hát nem, de minket nehéz megállítani :D
A webböngészős megoldás sem tűnik egyszerűnek ;(
Hogy lesz ebből Matrix bot? ;(
import requests
import hmac
import hashlib
import base64
key = bytes([53, 75, 109, 112, 109, 103, 100, 53, 102, 74])
nonce = (requests.get("https://idp.e-kreta.hu/nonce")).text
message = bytes(f"72428098780klik036729001{nonce}", 'utf-8')
dig = hmac.HMAC(key, message, hashlib.sha256).digest()
generated = base64.b64encode(dig).decode()
headers = {"Content-Type": "application/x-www-form-urlencoded; charset=utf-8","User-Agent": "hu.ekreta.student/1.0.5/Android/0/0", "X-AuthorizationPolicy-Key" : generated, "X-AuthorizationPolicy-Version" : "v1", "X-AuthorizationPolicy-Nonce" : nonce}
r = requests.post("https://idp.e-kreta.hu/connect/token", data="username=FELHASZNÁLÓ&password=JELSZÓ&institute_code=SULIKÓD&grant_type=password&client_id=kreta-ellenorzo-mobile", headers=headers).json()
print(r)
Nekem ezt a Python kódot sikerült összedobnom a dart alapján, viszont ez nem megy. Ha valaki tudja, hol rontottam el, nagyon megköszönném, ha elmondaná :D
Nem lehet, hogy az User-Agent-et is vizsgálja a szerver?
De, nézi, viszont az én telefonom által használt user-agentel sem ment. Itt szerintem az X-AuthorizationPolicy-Key
generálásával van a baj.
Sőt, szinte biztos, mert megnéztem azt a nonce-t is, amit feljebb küldtem (OwLOEZCkhmaFLHM8FsQWmA==) és erre nem azt kaptam vissza, amit kellett volna :/
Sziasztok!
Nagyon szívesen segítenék, de sajnos már nincs élő Kréta hozzáférésem. Hogyha bármit találtok kérlek értesítsetek és/vagy csináljatok egy PR-t hogy mások is lássák :rocket:
Sok sikert!
Hi,
sha256-ot használtál:
hmac.HMAC(key, message, hashlib.sha256)
sha512 helyett:
Hmac hmac = Hmac(sha512, key);
import requests
import hmac
import hashlib
import base64
username='xxx'
userpass='yyy'
iskid='zzz'
key = bytes([53, 75, 109, 112, 109, 103, 100, 53, 102, 74])
nonce = (requests.get("https://idp.e-kreta.hu/nonce")).text
print(nonce)
message = bytes(username.lower()+iskid.lower()+nonce, 'utf-8')
print(message)
dig = hmac.HMAC(key, message, hashlib.sha512).digest()
print(dig)
generated = base64.b64encode(dig).decode()
headers = {"Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
"User-Agent": "hu.ekreta.student/1.0.5/Android/0/0",
"X-AuthorizationPolicy-Key" : generated,
"X-AuthorizationPolicy-Version" : "v1",
"X-AuthorizationPolicy-Nonce" : nonce}
r = requests.post("https://idp.e-kreta.hu/connect/token", data="username="+username+"&password="+userpass+"&institute_code="+iskid+"&grant_type=password&client_id=kreta-ellenorzo-mobile", headers=headers).json()
print(r)
---->
{'access_token': 'eyJhbGciOiJSUzI1NiIsI...fm4Bx2pet-g', 'expires_in': 1800, 'token_type': 'Bearer', 'refresh_token': '1003...04295', 'scope': 'kozelkep-webapi.public kreta-dkt-webapi.public kreta-ellenorzo-webapi.public kreta-fileservice-webapi.public kreta-mobile-global-webapi.public offline_access openid'}
Oh, király vagy. Bár nem jöttem rá én mit rontottam el. Kb ugyanaz az egész 😅 Annyi, hogy én hardcodeoltam az én adataimmal.
Basszus Már látom :D Hülye vagyok...
PR-t nyitsz?
Te írtad át pyhtonba én csak fogtam egy typo-t. ;)
Hogy a headereket és a fentit belekalapáljam a lib-be nekem több idő kell, ami valszeg a jövő hétig nem lesz ;(
Ha van érkezésed és időd megköszönöm, ha javítod a kódot egy PR-rel. ;)
Okés, akkor csinálok egyet. Köszi a felfedezésért, tegnap vagy 6 órát foglalkoztam ezzel és még mindig nem hiszem el hogyan nem tűnt fel :D
Megvolt a merge, köszönöm a munkátokat!
Nem tudom tud-e nekem valaki segíteni?
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -H "User-Agent: hu.ekreta.student/1.0.5/Android/0/0" -d 'userName=xxxxxxxx&password=xxxxxxxxx&institute_code=xxxxxxxxx&grant_type=password&client_id=kreta-ellenorzo-mobile' https://idp.e-kreta.hu/connect/token
bearer token request nekem:
{"error":"invalid_request"}
-et ad ;(
Mit rontok el?