(voor iedereen die dit leest: mijn excuses voor de hele lap tekst... ik heb echter al een heleboel uitgeprobeerd en wil vooral de zaken correct krijgen... bedankt als je hiertoe bijdraagt!

)
Al heel erg bedankt voor jouw reactie @
mulder ! Ik probeer even mee te gaan in de redenering.
ok, dat is duidelijk (en komt overeen met een testproject waarmee ik gespeeld heb: het maakt gebruik van IdentityModel.OidcClient en een demo instantie van identityserver (
https://demo.identityserver.io)... zoals ik het zie, moet ik zelf een eigen versie van die identityserver maken, klopt dat?
Dat laatste is inderdaad de bedoeling: enkel deze ene app (waarvan het uiteraard de bedoeling is dat er verschillende gebruikers zijn) zou gebruik mogen maken van de API.
mulder schreef op dinsdag 28 mei 2019 @ 15:10:
Dat je de bomen door het bos niet meer ziet kan goed kloppen, er zijn veel verschillende terminologieën, versies, flows en libraries waar je goed gek van kan worden. Probeer goed het scenario dat je wilt bereiken te beschrijven en houd dat tegen de mogelijk oplossing aan
Dit is het concept met de componenten:
- een Windows Forms app die ik voor het gemak de client noem... de user gebruikt de client om berichten te lezen en te verzenden;
- een ASP.Net (géén Core) Web API (voor het gemak API) die opgeroepen wordt vanuit de client;
- een SQL-server instantie (DB) die zorgt voor de opslag van de berichten en de strikt noodzakelijke userdata.
Dus simpel geschetst krijgen we iets als:
( user <--> ) client <--> API <--> DB
Misschien niet onbelangrijk om te vermelden: in de DB staan alle messages versleuteld opgeslagen... het is pas op de client dat die ontsleuteld mogen worden. Omgekeerd wordt een message die de gebruiker opstelt al op de client versleuteld alvorens verzonden te worden.
Voor het bepalen van de juiste Authorization Flow, moet ik eerst al de terminologie correct kunnen toepassen... en daar heb ik wel wat twijfels bij... ik volg even de terminologie van
deze pagina:
- Resource Owner: omdat dit de entiteit is die toegang moet geven tot een afgeschermde resource, dacht ik aan de gebruiker
- Application: deze vraagt toegang tot een protected resource in naam vd resource owner... hier dacht ik aan de API... of is het toch de client
- Resource Server: er staat letterlijk " the server hosting the protected resources. This is the API you want to access."... de API dus
- Authorization Server: deze moet de Resource Owner authenticeren en Access Tokens (de token waarvan je helemaal bovenaan spreekt) uitdelen na succesvolle aanmelding... de Authorization Server is dan een van de External Login Partners in dat geval? Maar kan de gebruiker zich dan nog met eenvoudige username+password aanmelden in de client?
- User Agent: de agent die de resource owner gebruikt om te interageren met de application... in mijn situatie lijkt dat dus de client.
Mijn verontschuldigingen voor dit noob-gehalte, maar voor een nieuweling in het onderwerp is het inderdaad overweldigend.
Als bovenstaande veronderstellingen correct zijn, kom ik volgens
het beslissingsschema voor OAuth 2.0 Grant uit op volgende redenering:
- Is the Application the Resource Owner? neen
- Is the Application a web app executing on the server?
- Als het de API is, ja => Authorization Code Grant
- Als het de client is, neen => ga verder
- Is the Application absolutely trusted with user credentials? als we hier komen, is Application == client => ja (in de veronderstelling dat de client de gebruikersgegevens veilig opslaat) => Resource Owner Password Credentials Grant
Het lijkt er dus op dat een correcte toepassing van de terminologie hierop al een antwoord geeft (dan is het natuurlijk nog een kwestie van dat geïmplementeerd te krijgen)... vraag is dus:
welke toepassing van terminologie is de juiste?OpenID (=> onderliggend OAuth 2.0) ... volgens
hun eigen website is OpenID Connect de enige final specification, dus de te volgen versie.
Als ik bij de
Certified OpenID Connect Implementations kijk, dan is er maar 1 C# library:
IdentityModel.OidcClient 2.0 (hiervan komt ook het testproject waarover ik eerder sprak).
Hier is het een "ja maar"-probleem: als ik het goed begrepen heb, moet je voor ADAL altijd gebruik maken van Active Directory... dit is niet wat ik wil (b.v. een gebruiker zou ook met een FB- of Google-account mogen aanmelden).
Ik neem aan dat je MSAL i.p.v. MSIL bedoelt... daar lijkt het mij dat je ook sowieso Azure nodig hebt... als die aanname correct is, valt dat eigenlijk ook weer af (tenzij er anders echt geen goede oplossing voor mijn probleem is).
En er zijn inderdaad vele voorbeeldprojecten, maar tot nu toe heb ik er enkel gevonden die gebruik maken van Azure of (en vooral dit laatste) voor ASP.Net
Core geschreven zijn... helaas heb ik daarvoor geen ondersteuning bij mijn hoster.
Beste Tweaker,
Als je tot hier geraakt bent met lezen, hartelijk dank... hier is een drankje voor de moeite

... (ook wel een beetje in de hoop dat dat extra energie geeft om mij verder te helpen

)
Thx!
edeboeck