Vraag Wat is het verschil tussen de 2 workflows? Wanneer gebruik maken van de autorisatiecode?


OAuth 2.0 heeft meerdere workflows. Ik heb een paar vragen over de twee.

  1. Autorisatiecode stroom - Gebruiker logt in vanuit client-app, authorisatieserver retourneert een autorisatiecode naar de app. De app vervangt vervolgens de autorisatiecode voor toegangstoken.
  2. Impliciete verleningsstroom - De gebruiker meldt zich aan vanuit de client-app, de machtigingsserver geeft rechtstreeks een toegangstoken uit aan de client-app.

Wat is het verschil tussen de twee benaderingen op het gebied van beveiliging? Welke is veiliger en waarom?

Ik zie geen reden waarom een ​​extra stap (uitwisselingsmachtigingscode voor token) in één werkstroom wordt toegevoegd wanneer de server rechtstreeks een toegangstoken kan afgeven.

Verschillende websites zeggen dat de stroom van de autorisatiecode wordt gebruikt wanneer de clientapp de inloggegevens kan beveiligen. Waarom?


126
2018-05-01 15:44


oorsprong


antwoorden:


De access_token is wat je nodig hebt om een ​​beschermde bron (een API) te noemen. In de stroom van de autorisatiecode zijn er 2 stappen om het te krijgen:

  1. De gebruiker moet verifiëren en een a retourneren code aan de API-consument (de "Klant" genoemd).
  2. De "client" van de API (meestal uw webserver) ruilt de code verkregen in # 1 voor een access_token, zichzelf authenticeren met een client_id en client_secret
  3. Het kan dan de API bellen met de access_token.

Er is dus een dubbele controle: de gebruiker die eigenaar is van de resources is opgedoken via een API en de client die de API gebruikt (bijvoorbeeld een web-app). Beide zijn gevalideerd om toegang te verlenen. Let op het "authorisatie" karakter van OAuth hier: gebruiker verleent toegang tot zijn bron (via de code teruggestuurd na authenticatie) naar een app, de app krijgt een access_tokenen roept namens de gebruiker.

In de impliciete stroom is stap 2 weggelaten. Dus na gebruikersauthenticatie, een access_token wordt direct geretourneerd, dat u kunt gebruiken om toegang te krijgen tot de bron. De API weet niet wie de API aanroept. Iedereen met de access_token kan, terwijl in het vorige voorbeeld alleen de webapp zou zijn (het is een interneel dat normaal niet voor iemand toegankelijk is).

De impliciete stroom wordt meestal gebruikt in scenario's waarin het wordt opgeslagen client id en client secret wordt niet aanbevolen (een apparaat bijvoorbeeld, hoewel velen het hoe dan ook doen). Dat is wat de disclaimer betekent. Mensen hebben toegang tot de clientcode en kunnen daarom de inloggegevens verkrijgen en zich voordoen als resourceclients. In de impliciete stroom zijn alle gegevens vluchtig en is er niets opgeslagen in de app.


167
2018-05-02 15:30



Ik zal hier iets toevoegen dat volgens mij niet duidelijk is gemaakt in de bovenstaande antwoorden:

  • De Authorization-Code-Flow zorgt voor de finale toegangstoken nooit bereiken en nooit op de machine worden opgeslagen met de browser / app. De tijdelijke autorisatiecode wordt aan de machine gegeven met de browser / app, die vervolgens naar een server wordt verzonden. De server kan deze vervolgens uitwisselen met een volledige toegangstoken en toegang hebben tot API's, enz. De gebruiker met de browser krijgt alleen toegang tot de API via de server met het token.
  • Impliciete stroom kan slechts twee partijen omvatten, en het laatste toegangstoken wordt met de browser / app op de client opgeslagen. Als deze browser / app wordt gehackt, is dit ook het auth-token dat gevaarlijk kan zijn.

tl; Dr. gebruik geen impliciete stroom als u de machine van de gebruiker niet vertrouwt om tokens maar u aan te houden do vertrouw op je eigen servers.


44
2017-08-08 10:31



Het verschil tussen beide is dat:

  1. In Implicit flow wordt het token direct teruggestuurd via omleidings-URL met het teken "#" en dit wordt meestal gebruikt in javascript-clients of mobiele applicaties die geen eigen serverkant hebben en de client hoeft zijn geheim niet in sommige implementaties te verstrekken .

  2. In de stroomcode van de autorisatiecode wordt de code geretourneerd met "?" om leesbaar te zijn voor serverzijde, moet serverzijde deze keer client-geheim aan token-url verstrekken om een ​​token als json-object van de autorisatieserver te krijgen. Het wordt gebruikt voor het geval u een applicatieserver hebt die dit aankan en gebruikers-token opslaat met zijn / haar profiel op zijn eigen systeem en meestal wordt gebruikt voor algemene mobiele applicaties.

dus het hangt af van de aard van uw clienttoepassing, welke nog veiliger "Autorisatiecode", aangezien het het geheim op de client aanvraagt ​​en het token kan worden verzonden tussen de machtigingsserver en de clienttoepassing op een zeer beveiligde verbinding, en de autorisatieaanbieder kan Beperk sommige clients om alleen "Autorisatiecode" te gebruiken en Impliciet niet toe te staan


12
2018-05-02 09:22



De impliciete toekenning is vergelijkbaar met de autorisatiecodetoewijzing met twee duidelijke verschillen.

Het is bedoeld om te worden gebruikt voor op user-agent gebaseerde clients (bijvoorbeeld web-apps met één pagina) die een client niet geheim kunnen houden omdat alle applicatiecode en opslag gemakkelijk toegankelijk zijn.

Ten tweede retourneert de machtigingsserver een toegangstoken in plaats van dat de machtigingsserver een autorisatiecode retourneert die wordt ingewisseld voor een toegangstoken.

Hier vindt u details http://oauth2.thephpleague.com/authorization-server/which-grant/


3
2018-04-25 20:37



Laat me de punten samenvatten die ik van bovenstaande antwoorden heb opgedaan en enkele van mijn eigen inzichten toevoegen.

Autorisatiecode Flow !!!

  • Als u een webtoepassingsserver heeft die fungeert als OAuth-client
  • Als u een langlevende toegang wilt hebben
  • Als u offline toegang tot gegevens wilt hebben
  • wanneer u verantwoordelijk bent voor api-oproepen die uw app maakt
  • Als u uw OAuth-token niet wilt lekken
  • Als u niet wilt dat uw toepassing de autorisatiestroom doorloopt telkens wanneer deze toegang tot gegevens nodig heeft. OPMERKING: de Impliciete Grant-stroom neemt geen verversingstoken in ontvangst, dus als de verificatieserver regelmatig toegangstokens vervalt, moet uw toepassing de autorisatiestroom doorlopen wanneer deze toegang nodig heeft.

Impliciete Grant Flow !!!

  • Wanneer u Web Application Server niet als OAuth Client laat fungeren
  • Als u geen toegang met een lange levensduur nodig hebt, is er alleen tijdelijke toegang tot gegevens vereist.
  • Als u de browser vertrouwt waarin uw app wordt uitgevoerd en er is een beperkte zorg dat het toegangstoken lekt voor niet-vertrouwde gebruikers.

1
2018-01-13 15:38



Impliciete stroom

voordelen

  • Simplest om te implementeren

nadelen

  • Toegangstokens zichtbaar voor browser
  • De oorsprong van toegangstokens kan niet worden bepaald
  • Toegangstokens kunnen niet verlopen (volgens het beleid van Google)

Autorisatiecode stroom

voordelen

  • Meest veilig
  • Toegangstokens en verversingstokens kunnen alleen worden gemaakt als een gedeeld geheim bekend is
  • Kan worden uitgebreid met nieuwe beveiligings- en UX-functies wanneer deze beschikbaar komen

nadelen

  • Moet meerdere auth-eindpunten implementeren

Citaat: https://developers.google.com/actions/develop/identity/oauth2-overview#supported_oauth_20_flows


1
2018-02-10 20:21



Vanuit praktisch perspectief (wat ik begreep), de belangrijkste reden voor het hebben van Authz-codestroom is:

  1. Ondersteuning voor vernieuwingstokens (langdurige toegang door apps namens de gebruiker), niet ondersteund in impliciete: refereer naar:https://tools.ietf.org/html/rfc6749#section-4.2
  2. Ondersteuning voor toestemmingspagina, een plaats waar Resource-eigenaar kan bepalen welke toegang moet worden geboden (soort machtigingen / machtigingspagina die u in Google ziet). Hetzelfde is er niet impliciet. Zie sectie : https://tools.ietf.org/html/rfc6749#section-4.1 , punt (B)

"De machtigingsserver verifieert de broneigenaar (via de user-agent) en bepaalt of de broneigenaar het toegangsverzoek van de client verleent of weigert"

Afgezien van dat, met behulp van vernieuwing tokens, apps toegang op lange termijn tot gebruikersgegevens kunnen krijgen.


0
2017-12-06 07:20