Hej,
Bra kommentarer, ska försöka bemöta dem punkt för punkt.
1)
Angående loopen så är det något som görs när det finns anledning. Dvs när
användaren accessar RP:n eller någon annan händelse, så det är inte en
konstant pollande lösning.
Rent visuellt för användaren behöver det knappt märkas, man byter server
under en sekund och är sedan tillbaka hos RP. Eftersom vi troligtvis inte
producerat något content under round-trip RP-OP-RP så lär inte browsern
uppdatera sig förrän man är tillbaka hos RP. Det skulle ju även kunna vara
ett javascript-API med ett AJAX-anrop vilket skulle förenkla ännu mer.
2)
Eftersom loopen görs först när användaren accessar RP och lägg då till att
bibliotekarien säger "Gå in på RP imorgon bitti ska detta vara klart". Då
ges tid för OP att bli klar eftersom OPs process-tid måste vara ganska
förutsägbar och det kommer inte behövas mer än en (1) pollning. Och en
pollning som händer en gång är inte en pollning utan bara en vanlig request.
Man skulle kunna ha en back-end kanal enligt det ursprungliga
sekvensdiagrammet, men då inte som en del av OIdC, utan som ett tillägg
till standardtjänsten för de som vill ha en event-driven back-end kanal.
Om RP också har en backend-processing-tid av någon anledning så är detta
upp till RP att lösa.
3)
Det är en stor skillnad på ett back-end-anrop machine-to-machine vs en
inloggad användare med en session.
Backend:
* IP filtrering är nödvändigt
* Lösningen behöver vara elastisk och redundant och lätt kunna skalas och
lastbalancera åt båda håll, både på se-leg sidan och RP.
* Om se-leg behöver lägga upp fler maskiner med flera IP måste det lätt gå
att distribuera och enabla de nya IP:t hos samtliga RP:n. Vi har varit med
i projekt med väldigt stora företag där detta varit omöjligt.
* Pss om RP behöver skalas upp eller byta IP/DNS.
* Vissa Paas leverentörer är ju super-elastiska där även IP-numret är
dynamiska och kan bytas. Så IP filtrering kan vara ett riktigt elände när
det börjar skala.
* Authentisering av OP
* PKI antar vi? Administrationskostnader tillkommer och lite komplicerat
för vissa.
* Lösenord, fast det känns inte som ett seriöst alternativ...
* Om en RP använder sig av flera asynkrona lösningar blir det väldigt
konfigurationsintensivt. Dvs det skalar dåligt.
frontend:
* Auth response kommer in som en redirect till en inloggad session,
svårspoofad
* Elastisk lösning från befintlig RP infrastruktur
Johan och alla andra RP:s: vad har ni för åsikter?
Om det det inte framgått tidigare så passar en front-end lösning mycket
bättre i vårt koncept och är ett starkt önskemål.
Vi har plöjt ned nog med tid på detta de senaste dagarna. Ska diskussionen
fortsätta tror jag vi behöver sätta oss och prata över skype eller i samma
rum.
mvh
Anders & Magnus
mån 3 okt. 2016 kl 10:54 skrev Fredrik Thulin <fredrik at thulin.net>:
On måndag 3 oktober 2016 kl. 08:25:55 CEST Magnus
Hoflin wrote:
Hej igen,
Bra invändning Rebecka, vi håller med, det höll inte riktigt som vi
ritade
det. Vi ville inte ändra mer än nödvändigt i er
lösning men det blev inte
ett resultat som kan sägas följa specen. Och vi håller 100% med er om att
det behöver bli en lösning som följer spec, annars finns det ju ingen
poäng
med att basera sig på en standard öht.
Vi tycker er lösning på det stora hela känns bra. Vi har dock fortfarande
en "gut feeling" om att det föreslagna sättet att skicka responset inte
är
best practice, kanske t.o.m. fel. Vi vill också
poängtera att vi inte
ältar
det här för att djävlas utan för att vi, precis
som ni, är måna om att
komma fram till bästa möjliga lösning.
Så vi gör ett nytt försök: OIDC bygger ju på OAuth2. Vår tolkning är att
tillämpliga skall-krav i OAuth2 gäller, så länge inte OIDC "overridar"
det.
Med det sagt hävdar vi att det inte är OK att
utesluta user-agent när man
skickar AuthenticationRequest och AuthenticationResponse. Se kap 3
(översta
stycket med punktlistorna) i OAuth2 (
https://tools.ietf.org/html/rfc6749#section-3) Man kan också läsa kap
1.7
i samma spec för en nyansering av det (
https://tools.ietf.org/html/rfc6749#section-1.7) Nyckelorden är "via
the
user-agent". Det finns alltså t.ex. en
anledning till att det heter
"redirect_uri" och inte "response_uri". Vi känner inte till att OIDC
(eller
OAuth2) någoLnstans lättar på det kravet, gör ni?
Hej
Rebecka är den riktiga experten på OIDC, så jag lämnar åt henne att
kommentera
detta.
Vi har ritat en ny skiss som vi bifogat. Notera
där att vi använder oss
av
noncet på det sätt ni föreslog, men som vi hade
en invändning mot. Här
blev
det tvunget att göra på ert sätt och vår
invändning var mer av karaktären
"om det går att undvika" snarare än "absolut inte!!", och i det
läget
kändes response-skickandet mycket mer angeläget.
Genom att ta med user-agent i skickandet av AuthenticationRequest och
AuthenticationResponse så försvinner per automatik den delen i lösningen
som vår "gut feeling" har vänt sig emot. Men, vi känner också att ni
kanske
har uteslutit user-agent av en bra anledning och
att vi inte har förstått
hela use-caset? Om så är fallet får ni gärna förklara så att vi får hela
bilden klar för oss.
Jag har tittat lite på ert diagram och tror att det vore fullt möjligt att
bygga se-leg så, men några observationer:
1) Användarens browser skulle studsa runt mellan
diglias.com och se-leg.se
i
det du beskriver som "loop". Möjligen går det att gömma i bakgrunden så att
användarna slipper se (och oroas av) det.
2) Genom att slutförd se-leg vetting inte konstateras förän användaren
återvänder till IdP:n (dvs. exempelvis
diglias.com) så får inte IdP:n
tidsmässig möjlighet för ex. eget beslutsfattande involverande en människa
efter se-leg vetting men innan användaren får status X eller Y i ert
system.
När ni, enligt nuvarande implementation får ett callback-anrop till er
redirect_uri direkt från se-leg:s OP så har ni mycket större möjlighet till
egna kontroller, value add som att skicka ett SMS till användaren och
informera om att det är klart, eller vad ni nu skulle kunna tänkas vilja
göra.
3) I er skiss sker ett anrop till er redirect_uri från användarens browser
istället för från OP:n, men ett anrop sker likväl. Er redirect_uri måste
således vara nåbar för inkommande HTTP-anslutningar, eller hur? Jag antar
att
den dessutom kommer vara nåbar från hela internet, medans den i nuvarande
implementation skulle kunna begränsas till att bara vara nåbar från några
kända ändpunkter hos se-leg.
/Fredrik
_______________________________________________
se-leg-ref mailing list
se-leg-ref at lists.sunet.se
https://lists.sunet.se/listinfo/se-leg-ref