-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Elmir Hodžić
Luka Pejović
Sumejja Porča
Malik Koljenović
Preporučena metoda implementacije logina je korištenjem SSO login forme dostupne na http://do.mac.ba:88/sso/dist/.
Navedena forma prilikom uspješnog logina settuje cookie sid za SSO domen .mac.ba te bilo koja aplikacija koja se nalaza pod navedenim domenom može koristiti dati cookie za autentifikaciju sesije, da bi omogućili ovu funkcionalnost potrebno ja da vašu aplikaciju stavite pod navedeni domen npr. alpha**.mac.ba** gdje ćete vrijednost alpha prilagoditi nazivu vašeg tima, najjednostavniji način da ovo postignete je lokalnim mapiranjem u hosts datoteci tako što ćete unijeti (http://www.howtogeek.com/howto/27350/beginner-geek-how-to-edit-your-hosts-file/):
127.0.0.1 alpha.mac.ba
Ukoliko vaš lokani web server sluša na nekoj drugoj IP adresi mimo lokalhosta umjesto 127.0.0.1 unosite tu vrijednost. Nakon što izvršite navedena podešavanja i vaša aplikacija je dostupna preko domene .mac.ba možete pristupiti cookie sid.
Ubuduće ćete vašoj aplikaciji pristupati preko podešene poddomene tj. alpha.mac.ba, ukoliko budete koristili localhost ili neku drugu podešenu poddomenu pristup SSO cookie nece biti moguć i javljati će vam se CORS greška kao na slici ispod:
Metoda opisana ispod nije preporučena metoda za integraciju SSO Login-a. Preporučena metoda data je iznad.
###POST http://do.mac.ba:8888/BusinessLogic/Account.svc/json/login application/json
{
"loginModel":{
"Username": "mkoljenovic1",
"Password": "LaRambla1"
}
}
Navedena metoda u slučaju uspješnog logina vraća http response kod 200, cookie **sid **sa setovanom vrijednošću sesije i porukom:
{
"Message": "Successful login."
}
Registraciju je neophodno implementirati direktno u vašem projektu gdje sa vaše registracijske forme pozivate niženavedenu API metodu.
Napomena: šifra mora sadržavati mala i velika slova, brojeve, username i email moraju biti jedinstveni u suprotnom doći će do greške u registraciji
###POST http://do.mac.ba:8888/BusinessLogic/Account.svc/json/register application/json
{
"registerModel": {
"Username": "uname",
"Email": "[email protected]",
"Password": "Sifra123",
"FirstName": "Ime",
"LastName": "Prezime"
}
}
Ukoliko imate setovan sid SSO cookie validnost sesije možete provjeriti pozivom slijedeće API metode:
###GET http://do.mac.ba:8888/BusinessLogic/Account.svc/json/auth
Navedena metoda kao argument uzima sid cookie poslat u zaglavlju http zahtjeva, budući da je SSO hostan na portu 88, ukoliko je vaše rješenje hostano na nekom drugom portu, nekada je potrebno prisiliti slanje cookie vrijednosti sa ajax zahtjevnom, to je moguće izvršiti na sljedeći način (jQuery):
$.ajax({
type: "GET",
url: 'http://do.mac.ba:8888/BusinessLogic/Account.svc/json/auth',
xhrFields: {
withCredentials: true
},
success: function (data) {
...
}
});
Kao rezultat u slučaju da je sesija validna dobiti ćete podatke o trenutno prijavljenom korisniku:
{
"Email": "[email protected]",
"FirstName": "Malik",
"LastName": "Koljenovic",
"Roles": [
"ADMIN",
],
"UserId": 41,
"Username": "mkoljenovic1"
}
U protivnom dobijate http kod 400 i odgovor:
{
"Details": "Wrong or expired token"
}
Logout se vrši pozivom navedene metode, koristi se sid cookie poslat u zahtjevu, pri ajax pozivima vrijedi isto kao i za provjeru sesija.
###POST http://do.mac.ba:8888/BusinessLogic/Account.svc/json/logout application/json
Odgovor:
{
"Message": "Logout succesful"
}
Ukoliko korisnik želi izmijeniti vlastitu šifru to je moguće učiniti pozivom navedene API metode, gdje je ID u zahtjevu ID korisnika koji vrši radnju.
###POST http://do.mac.ba:8888/BusinessLogic/Account.svc/json/changepassword application/json
{
"ID": 81,
"OldPassword": "Skafiskafnjak111",
"NewPassword": "Skafiskafnjak222"
}
U slučaju da je sve prošlo uredno dobiti ćete odgovor 200:
{
"Message": "Password successfully changed."
}
Javite nam se koje želite role, obzirom da AccountManagement servis još nije spreman za deployment. :) A tamo će biti sve potrebne metode oko role management-a, koje ćete moći koristiti iz SSO klijenta.
Za testiranje možete koristiti:
https://www.dropbox.com/s/flemivzhaz881z5/insomnia.rest.json?dl=0
Ovu metodu svi trebaju koristiti za autorizaciju pojedinih servisa za koje je to potrebno.
Za sve zahtjeve koji su na vašem web API-u autorizirani morate provjeriti da li je korisnik logiran i koje su njegove role - da biste znali da li on ima prava da izvrši određenu akciju. To se radi koristeći Auth metodu iz IIdentity servisa (a ne onu iz Account koja služi samo za pozivanje iz klijenta). Da biste njega koristili u vašem Web API-u morate dodati service reference - na Identity servis iz SSO.
Auth metoda iz Identity-a kao parametar prima token kojeg uzimate kao Cookies["sid"] iz originalnog korisnikovog zahtjeva.
Ukoliko imate setovan **sid **SSO cookie na istoj poddomeni u kojoj je i vaš Web API (da li je localhost - ako ste podigli SSO kod sebe ili .mac.ba nebitno - bitno je da je isto) on će biti vidljiv svim vašim metodama pa ćete moći uzeti token iz tog cookie-a i poslati ga Auth metodi.
Kao rezultat u slučaju da je token validan dobiti ćete podatke o trenutno prijavljenom korisniku:
{
"Email": "[email protected]",
"FirstName": "Malik",
"LastName": "Koljenovic",
"Roles": [
"ADMIN"
],
"UserId": 41,
"Username": "mkoljenovic1"
}
U suprotnom ćete dobiti Exception.
Dodavanje service reference - desni klik na References - Add Service Reference i tamo odaberete: http://do.mac.ba:8888/BusinessLogic/Identity.svc (ne znam je li ispravna verzija ovog servisa deploy-ana, provjerite to s nama - možete lokalno dići pa odabrati nešto kao: http://localhost:48202/BusinessLogic/Identity.svc ).
Nakon uspješnog dodavanja imate nešto ovako:
Korištenje Auth metode u jednom od CV projekata:
Dalje možete ove informacije o rolama korisnika i ID-u koristiti u vašoj biznis logici. Ova UserInfo klasa je napravljena po uzoru na DataContract AuthResponse i napravljena je kao obični View Model u vašem projektu.
Za sve greške i pitanja obratite se SSO timu mkoljenovic1 na etf.unsa.ba. Dokumentacija će biti ažurirana u slučaju dodavanja novih metoda ili pojašnjenja.