OAuth | |
---|---|
Navn | OAuth |
Mediefiler på Wikimedia Commons |
OAuth er en åben godkendelsesprotokol (skema) , der giver en tredjepart begrænset adgang til brugerens beskyttede ressourcer uden at overføre et login og adgangskode til den (tredjeparten) [1] [2] .
Arbejdet med protokollen begyndte i november 2006, og den seneste version af OAuth 1.0 blev godkendt den 4. december 2007. Som en efterfølgende udvikling dukkede OAuth 2.0-protokollen op i 2010, hvis seneste version blev offentliggjort i oktober 2012 som RFC 6749 .
Et af problemerne med autentificering og informationssikkerhed er, at brugere normalt bruger flere forskellige tjenester (f.eks. på Google, Twitter, Apple osv.), og dermed flere konti med deres egne logins og adgangskoder. Brugerne skal således gemme og beskytte mange logins og adgangskoder. Da hver af tjenesterne har sit eget sikkerhedssystem med sine egne sårbarheder og mangler, er alt dette skadeligt for brugernes bekvemmelighed og sikkerhed. For eksempel, hvis brugere bruger de samme adgangskoder til forskellige tjenester, efter at have fået adgang til en af konti, er hacking-proceduren for andre konti for angribere meget forenklet [3] .
Totrinsgodkendelse (f.eks . Google Authenticator ) kan bruges til at øge sikkerheden, når en anden brugertjeneste bruges til bekræftelse (f.eks. når en kode sendt til en mobiltelefon kræves til godkendelse på et websted ). Med denne tilgang reduceres sandsynligheden for hacking betydeligt. Nøglefunktionen ved at bruge OAuth er, at hvis brugeren har en velbeskyttet konto, så kan han ved hjælp af den og OAuth-teknologi godkende sig til andre tjenester, mens brugeren ikke behøver at afsløre sin hovedadgangskode. For eksempel behøver en bruger, der ønsker at give en online fotoudskrivningstjeneste adgang til billeder fra deres Facebook-konto , ikke give tjenesten adgangskoden til den pågældende konto. I stedet giver den autorisation til Facebook, som (med tilladelse fra brugeren eller tjenesteadministratoren) allerede giver onlineudskrivningstjenesten den nødvendige adgang til fotos [3] .
OAuth dukkede op i november 2006 under udviklingen af OpenID -protokollen til Twitter -mikroblogtjenesten af Blaine Cook . Sammen med Chris Messina ledte han efter en måde at bruge OpenID til at give adgang til Twitter API uden at give tjenesten en adgangskode. I samarbejde med OpenID co-creator David Recordon analyserede de funktionaliteten af OpenID såvel som proprietære autorisationsprotokoller såsom Flickr Auth , Google AuthSub og Yahoo! BBAuth , hvorefter de kom frem til, at der er behov for en ny åben protokol [4] .
I april 2007 blev en gruppe ingeniører dannet for at arbejde på dens oprettelse. Ansatte hos Google og AOL (som samtidig introducerede sin egen OpenAuth -protokol ) deltog i dets arbejde. Den endelige version af OAuth 1.0-protokolkernen blev frigivet den 4. december 2007. I 2008 blev der arbejdet med at standardisere protokollen i Internet Engineering Council [4] .
Den 15. april 2009 tilbød Twitter sine brugere en løsning, der tillader tredjepartswebsteder og -tjenester at få adgang til deres konti. Det hed "Log ind med Twitter" og var baseret på OAuth. Denne hændelse udløste protokollens første omfattende sårbarhedsundersøgelse, og få dage senere blev der opdaget en potentiel sårbarhed, der påvirker alle eksisterende OAuth-implementeringer. Derefter, den 23. april, blev den første sikkerhedstilføjelse til protokollen frigivet af udviklerfællesskabet, som var inkluderet i den opdaterede OAuth Core 1.0 Revision A-specifikation, offentliggjort den 24. juni. I april 2010 blev hvidbogen RFC 5849 om OAuth-standarden [4] udgivet .
I 2010 begyndte arbejdet med en ny version af OAuth 2.0-protokollen, der ikke var bagudkompatibel med OAuth 1.0 [1] . I oktober 2012 blev rammen for OAuth 2.0 offentliggjort i RFC 6749 , og brugen af token-bærer i RFC 6750 .
Der var flere forudsætninger for at oprette OAuth 2.0. Først og fremmest er OAuth ret ikke-trivielt at bruge på klientsiden. Et af målene med at udvikle den nye OAuth er at gøre det nemmere at udvikle klientapplikationer. For det andet, på trods af implementeringen af tre metoder (kaldet flows), der er erklæret i standarden for at opnå et token (unik identifikator) til autorisation: for webapplikationer, desktop-klienter og mobile klienter er alle tre metoder faktisk slået sammen til én. Og for det tredje viste protokollen sig at være dårligt skalerbar. Ud over nye streams blev [5] [6] tilføjet til det :
I øjeblikket bruges OAuth 2.0 af en lang række tjenester, såsom Google , Instagram , Facebook , VKontakte og andre.
I juli 2012 annoncerede Eran Hammer, den nuværende redaktør af OAuth 2.0-standarden, sin opsigelse efter tre års arbejde med den nye standard og anmodede om, at hans navn blev fjernet fra specifikationerne. Han fortalte om sine synspunkter på sin hjemmeside [7] og holdt senere en tale [8] . David Recordon har også senere slettet sit navn fra specifikationen uden at give grunde [ 9] . Dick Hardt blev redaktør af OAuth2.0-standarden, og på trods af Eran Hammers synspunkter blev OAuth 2.0-rammeværket offentliggjort i RFC 6749 i oktober 2012 [1] .
Ved brug af OAuth - autorisation overfører brugeren ikke sit login og password til beskyttede ressourcer direkte til applikationen [3] . Derfor:
I tilfælde af autorisation uden brug af OAuth-protokollen skal brugeren sende sit login og adgangskode. Denne metode har yderligere ulemper [3] :
Selvom OAuth og OpenID har meget til fælles, er OAuth en protokol i sig selv og har intet at gøre med OpenID [10] :
Grundlæggende begreber brugt i protokoller og eksempler på deres brug.
OAuth 1.0 definerer tre roller: klient, server og ressourceejer. Disse tre roller er til stede i enhver OAuth-handling, i nogle tilfælde er klienten også ejer af ressourcen. Den originale version af specifikationen bruger et andet sæt udtryk for disse roller: forbruger (klient), service (server) og bruger (ressourceejer) [11] . I OAuth 2.0-protokollen var der en adskillelse af serverroller: en autorisationsserver og en server, der gemmer beskyttede ressourcer, er tildelt separat [6] .
OAuth understøtter 3 signaturmetoder, der bruges til at signere og validere anmodninger: PLAINTEXT , HMAC - SHA1 og RSA - SHA1 . PLAINTEXT er trivielt at bruge og tager betydeligt mindre tid at beregne, men det kan kun være sikkert over HTTPS eller lignende sikre kanaler. HMAC - SHA1 tilbyder en enkel og generisk algoritme, der er tilgængelig på de fleste platforme, men ikke alle ældre enheder, og bruger en symmetrisk delt nøgle. RSA - SHA1 giver øget sikkerhed med et nøglepar, men er mere kompleks og kræver nøglegenerering [12] .
For at forhindre truslen om genbrug af anmodninger bruger OAuth en nonce og et tidsstempel . Udtrykket "nonce" bruges til at henvise til en engangskode, som er et tilfældigt sæt bogstaver og tal og er designet til entydigt at identificere en anmodning. At have en unik identifikator i en anmodning giver tjenesteudbyderen mulighed for at forhindre, at den genbruges. Denne tilgang implementeres ved at generere en unik streng for hver anmodning sendt til serveren af klienten. For at forhindre genbrug af anmodninger SKAL serveren gemme modtagne nonces [12] .
Det kan dog være meget dyrt for serveren at gemme alle modtagne nonces. For at forhindre overdreven lageroverhead i OAuth tilføjes et tidsstempel til hver anmodning, som tillader serveren kun at gemme nonce i en specificeret begrænset tid. Ved modtagelse af en anmodning med en etiket tidligere end tilladt, afviser serveren den [12] .
OAuth 1.0 og OAuth 2.0 bruger tre typer autoritet: klientlegitimationsoplysninger ( forbrugernøgle og hemmelig eller klientlegitimationsoplysninger ) , midlertidige legitimationsoplysninger ( anmodningstoken og hemmelige eller midlertidige legitimationsoplysninger ) og tokens ( adgangstoken og hemmelige eller engelske tokenslegitimationsoplysninger ) [13] [ 3] .
Klientlegitimationsoplysningerne bruges til at godkende klienten. Serveren kan levere specielle tjenester til klienter, såsom at begrænse fri adgang eller give ressourceejeren mere detaljerede oplysninger om klienter, der forsøger at få adgang til beskyttede ressourcer. I nogle tilfælde er klientlegitimationsoplysningerne ikke sikre og kan kun bruges til informationsformål, såsom i desktop-applikationer.
Tokenet bruges i stedet for ressourceejerens navn og adgangskode. Ressourceejeren afslører ikke sine legitimationsoplysninger til klienten, men tillader serveren at udstede et token til klienten - en særlig klasse af legitimationsoplysninger, der giver klienten nogle begrænsede muligheder. Klienten bruger tokenet til at få adgang til en beskyttet ressource uden at kende ressourceejerens adgangskode. Tokenet består af en digital signatur, normalt (men ikke altid) et tilfældigt sæt bogstaver og tal, der er unikt og kryptografisk stærkt, og en nøgle til at beskytte tokenet mod uautoriseret brug. Tokenet er begrænset med hensyn til autoritet og varighed og kan til enhver tid tilbagekaldes af ejeren af ressourcen, uden at det påvirker tokens udstedt til andre klienter [13] .
OAuth-godkendelsesprocessen bruger også et sæt midlertidige legitimationsoplysninger, der bruges i godkendelsesanmodningsfasen. For at tage højde for forskellige typer klienter (webgrænseflade, desktop, mobil osv.), tilbyder midlertidige tilladelser yderligere fleksibilitet og sikkerhed [13] .
Lad os forklare, hvordan OAuth 1.0-protokollen fungerer ved hjælp af et eksempel [13] . Antag, at en bruger (ressourceejer) ønsker at udskrive deres fotos (ressourcer) uploadet til photos.example.net (server) ved hjælp af printtjenesten "printer.example.net" (klient).
OAuth 2.0-protokollen er ikke bagudkompatibel med OAuth 1.0-protokollen [1] . I stedet for at komplementere OAuth 1.0, blev beslutningen taget om at udvikle en anden protokol [10] . Derfor er den måde, OAuth 1.0 og OAuth 2.0 fungerer på, forskellig. Så i OAuth 2.0-standarden er følgende flows (scenarier for interaktion mellem parterne) [1] beskrevet :
OAuth understøtter to metoder til godkendelse af meddelelser fra klienten: HMAC - SHA1 og RSA - SHA1 . Det er muligt at sende beskeder uden signatur, så er " almindelig tekst " angivet i signaturtypefeltet. Men i dette tilfælde skal forbindelsen mellem klienten og serveren ifølge specifikationen etableres via SSL- eller TLS-protokollen [13] .
Autentificering og nøgleudvekslingsprotokoller | |
---|---|
Med symmetriske algoritmer | |
Med symmetriske og asymmetriske algoritmer | |
Protokoller og tjenester, der bruges på internettet |