RƏSMİ şəxsiyyət vəsiqəsi

REST-in təsdiqlənməsi nə deməkdir və necə işləyir? Google-da yaxşı bir baxış tapa bilmirəm. Mənim anlayışım URL-də oturum açarını (remeberal) keçirməyinizdir, lakin bu çox pis ola bilər.

671
26 нояб. Jim Keener tərəfindən qoyulmuş 26 noyabr. 2008-11-26 04:47 '08 at 4:47 2008-11-26 04:47
@ 13 cavab

RESTful Client-Server mimarisinde kimlik doğrulamasını nasıl həll etmək olar?

Bir qayda olaraq, SOA dünyasında HTTP vasitəsilə əldə edilə bilər:

  • HTTPS üzərində HTTP əsas auth;
  • Cookies və sessiya idarə edilməsi;
  • HTTP başlıqlarında Token (məsələn, OAuth 2.0);
  • Əlavə imza variantları ilə identifikasiya tələb edin.

Bu metodları ən yaxşı şəkildə proqram arxitekturasına uyğunlaşdırmaq üçün uyğunlaşdırmaq və ya daha da yaxşılaşdırmaq lazımdır.

Hər bir identifikasiya sxemi təhlükəsizlik siyasətinizin və proqram təminatı arxitekturasının məqsədinə əsasən öz PRO və CON var.

HTTPS üzərində HTTP əsas auth

Bu, ən çox web xidmətlərinin istifadə etdiyi standart HTTPS protokoluna əsaslanan ilk həlldir.

 GET /spec.html HTTP/1.1 Host: www.example.org Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

Bütün brauzerlərdə default olaraq tətbiq oluna bilər, lakin brauzerdə saxlanılan (LogOut kimi funksiya yoxdur) və göstərilən istifadəçi adı və parolun ötürülməsi faktını göstərən dəhşətli identifikasiya pəncərəsi kimi bəzi tanınmış backlinks var (HTTPS vasitəsilə) serverə daxil edilməlidir (parol yalnız müştəri tərəfində qalır, klaviatura girişi zamanı və serverdə təhlükəsiz hash kimi saxlanılmalıdır).

Doğrulama Dəyişikliyi istifadə edə bilərik, ancaq bu da HTTPS tələb edir, çünki bu, MiM və ya Replayə həssasdır və HTTP-yə aiddir.

Çerezlər vasitəsilə sessiya

Dürüst olmaq üçün bir server üzərində idarə olunan bir sessiya əsla dəyərsiz deyil.

Bir ehtimal çerezin tərkibindəki bütün məlumatları saxlamaq olacaq. Və öz təqdiri ilə, cookie server tərəfində işlənir (müştəri həqiqətən cookie məlumatlarını şərh etməyə çalışmır: sadəcə hər bir sonrakı tələb üçün serverə göndərir). Lakin bu cookie məlumatları tətbiqi vəziyyət məlumatlarını əks etdirir, belə ki, müştəri təmiz vətəndaşlığı olmayan bir dünyada server deyil, idarə etməlidir.

 GET /spec.html HTTP/1.1 Host: www.example.org Cookie: theme=light; sessionToken=abc123 

Cookie texnikasının özü HTTP ilə bağlıdır, buna görə həqiqətən RESTful deyil, protokol müstəqil olmalıdır, IMHO. O, MiM və ya Replay hücumlarına həssasdır.

Token vasitəsilə verilmiş (OAuth2)

Alternativ, HTTP başlıqlarına simvolu yerləşdirməkdir, belə ki, sorğu təsdiqlənmişdir. OAuth 2.0 belədir, məsələn. RFC 6749-a baxın:

  GET /resource/1 HTTP/1.1 Host: example.com Authorization: Bearer mF_9.B5f-4.1JqM 

Bir sözlə, bu bir çerez faylına çox oxşardır və eyni problemlərə məruz qalır: HTTP-nin ötürülməsinin detallarına əsaslanan və bir çox təhlükəsizlik zəifliklərini, o cümlədən MiM və Replay-ni ifşa edən vətəndaşlığı olmayan bir şəxs yoxdur - bu səbəbdən yalnız HTTPS vasitəsilə istifadə edilməlidir.

Kimlik Doğrulama İsteği

Kimlik doğrulaması tələbi, hər bir RESTli sorğunun URI-də bəzi əlavə parametrlər vasitəsilə imzalanmasından ibarətdir. Bu yardım məqaləsinə baxın.

Bu məqalədə belə deyildi:

Bütün REST istekleri, alphabetik qaydada, özəl etimadnamələri imza simvolu olaraq istifadə edərək, kiçik halda sıralanan istek parametrlərini imzalayaraq təsdiq olunmalıdır. URL sorgusu dizesini kodlaşdırmadan əvvəl imzalanması lazımdır.

Bu üsul arxitektura ilə daha çox dövlət uyğunlaşdıra bilər və asan iclasın idarə edilməsi (bazası saxlamağa əvəzli olaraq yaddaş sessiyalarından istifadə etməklə) həyata keçirilə bilər.

Məsələn, burada yuxarıdakı linkdən bir URI-nin ümumi bir nümunəsidir:

 GET /object?apiKey=Qwerty2010 

belə ötürülməlidir:

 GET /object?timestamp=1261496500> 

İmzalanmış satır /object?apikey=Qwerty2010> və imza xüsusi API əsas komponentini istifadə edərək, bu simli SHA256 hashidir.

Server məlumatlarının önbelleğe alınması həmişə mövcud ola bilər. Məsələn, bizim çərçivəmizdə, cavabı URI səviyyəsində deyil, SQL səviyyəsində saxlayırıq. Buna görə də bu isteğe bağlı parametr əlavə edərək önbellek mexanizmini pozmur.

JSON və REST-ə əsaslanan ORM / SOA / MVC müştəri-server infrastrukturumuzda RESTful authentication haqqında daha ətraflı məlumat üçün bu yazıya baxın. HTTP / 1.1-də deyil, həm də adlandırılmış boruların və ya GDI mesajlarının (yerli olaraq) əlaqəsi olduğuna görə, biz HTTP xüsusi xüsusiyyətlərinə (məsələn, başlıq və ya çerez) etibar edilməyən və əsl RESTful test nümunəsini tətbiq etməyə çalışdıq.

Praktikada, OAuth 2.0 üçün gözlənilən MAC Tokens identifikasiyası mövcud "Token təqdim" sxemində böyük bir dəyişiklik ola bilər. Lakin bu hələ davam edən işdir və HTTP ötürülməsinə bağlıdır.

Nəticə

Xatırlamaq lazımdır ki, REST yalnız HTTP əsasında deyil, praktikada əsasən HTTP vasitəsilə həyata keçirilir. REST digər ünsiyyət səviyyələrini istifadə edə bilər. Beləliklə, RESTful identifikasiyası Google-un cavablarından asılı olmayaraq HTTP identifikasiyası üçün bir sinonim deyil. HTTP mexanizmindən istifadə etməməlidir, amma kommunikasiya qatından çıxarılmalıdır.

527
23 авг. Arnaud Bouchez tərəfindən verilmiş cavab 23 avqust. 2011-08-23 12:29 '11 'də 12:29' də 2011-08-23 12:29

İnsanlar həyəcanla "HTTP kimlik doğrulaması" deyə qışqırdılar, heç REST (heç bir cinayət - mən heç düşünmürəm) istifadə edərək, heç bir brauzer-based tətbiq etmək komplikasiyalarla qarşılaşdı)

Brauzerdə görüntüləmək üçün HTML səhifələrini yaradan RESTful xidmətlərində HTTP identifikasiyası istifadə edərkən aşkar etdiyim problemlər aşağıdakılardır:

  • İstifadəçi adətən çirkin bir brauzerinizin giriş pəncərəsini alır, bu isə çox düşmənçilikdir. parol axtarış, pəncərələr və s. əlavə edə bilməzsiniz.
  • Pəncərəni bağladıqdan sonra çıxın və ya başqa bir adla qeydiyyatdan keçin - problem tarayıcılar saytın kimlik məlumatını göndərəcək
  • zaman aşımları kompleksdir

Bu məsələləri həll edən çox məqbul bir məqalə burada , amma bu, böyük bir brauzerin javascript xakerlərə, işgəncələrə, işlənmələrə və s. Beləliklə, bu da inkişaf etmiş üsulla uyğun deyil, belə ki, yeni brauzerlər buraxıldıqda daimi xidmət tələb olunur. Mən bu təmiz və aydın bir dizayn olduğunu düşünmürəm, üstəgəl mən çox işləməyim və baş ağrım olduğumu hiss edirəm ki, mən REST simvollarımı dostlarımla coşqun şəkildə göstərə bilərəm.

Mən bir çerezin bir həll olduğuna inanıram. Ancaq gözləyin, çərəzlər qəzəblənir, deyilmi? Xeyr, onlar cookies kimi istifadə deyil, tez-tez istifadə olunur, bu, pisdir. Çerezin özü, brauzerin tarama zamanı izləyəcəyi HTTP identifikasiyası məlumatı kimi yalnız bir müştəri məlumatıdır. Müştəri məlumatlarının bu hissəsi, HTTP kimlik doğrulaması kimi, hər bir sorğu üçün serverə göndərilir. Aydındır ki, müştəri dövlətinin bu hissəsinin məzmunu server tərəfindən cavabdehin bir hissəsi kimi müəyyən edilə bilər.

border=0

Yalnızca aşağıdakı qaydaları istifadə edərək RESTful resursun iclaslarını yaratmaq:

  • Sessiyada istifadəçi identifikatorunun açarı (və ehtimal ki, vaxtın son hissəsi üçün sonuncu fəaliyyətin vaxt damgası)
  • Sessiya varsa, bu əsas etibarlıdır.
  • Oturum / seanslara POSTing deməkdir, yeni açar cookie kimi təyin olunur
  • Oturumdan çıxmaq DELETEING / sessiyalar / {key} (çox yüklənmiş POST ilə yadda saxlayırıq ki, biz brauzer olduğumuzu və HTML 5 hələ də uzun müddətdir)
  • Kimlik doğrulama, hər bir tələb üçün bir cookie kimi bir düyməyə göndərilməsi və sessiyanın varlığını və etibarlılığını yoxlamaqla həyata keçirilir

HTTP kimlik doğrulamasından yalnız fərq, kimlik doğrulama anahtarı server tərəfindən yaradılan və göndərilən müştəriyə deyil, müştəriyə daxil edilmiş şəxsiyyət məlumatlarından hesablamaq yerinə göndərilir.

convert42, https (istifadə etdiyimiz) istifadə edərkən cookie-nin təhlükəsiz bayrağını təyin etməsi vacibdir, beləliklə, identifikasiya məlumatı təhlükəsiz bir əlaqə üzərində göndərilmir. Böyük bir an, görmədim.

Mən inanıram ki, bu, böyük işləyən kifayət qədər bir həlldir, amma mən bu sxemdə potensial hadisələri müəyyən etmək üçün kifayət qədər təhlükəsizlik mütəxəssisi olmadığımı qəbul etməliyəm - hamısı bilirəm ki, yüzlərlə qeyri-RESTful web applications , əsasən eyni giriş protokolunu ($ _SESSION inphp, Java EE-də HttpSession və s.) istifadə edin. Çerez başlığının məzmunu, sadəcə, server tərəfindəki resursları tapmaq üçün istifadə olunur, eyni zamanda qəbul dilinin tərcümə resurslarına daxil olmaq üçün istifadə edilməsi və s. Mən də hiss edirəm ki, bu eynidır, amma digərləri bəlkə deyil? Siz nə düşünürsünüz?

405
16 июля '09 в 10:39 2009-07-16 10:39 Cavab 16 iyul '09 saat 10:39 'da skrebbel tərəfindən verilmişdir 2009-07-16 10:39

Burada yaxşı insanlar tərəfindən bu mövzuda kifayətdir. Amma mənim 2 sentim var.

2 qarşılıqlı rejimi var:

  • avtomobilin sahibi (htm)
  • maşın maşın (MTM)

Bir maşın bir REST API kimi ifadə olunan ümumi məxrəcdir və subyektlər / müştərilər ya insanlar və ya maşınlardır.

İndi gerçək bir RESTful arxitekturasında, vətəndaşlığı olmayan konsepsiya, bütün tətbiq olunan dövlətlərin (yəni, müştəri dövlətlərin) hər bir tələb ilə təmin edilməsini nəzərdə tutur. Müvafiq olaraq tələbi işləyib və müvafiq cavabı təmin etmək üçün REST API tələb olunur.

Bunu Scrabeldə göstərildiyi kimi "şəxsdən maşınya", "browser-based" tətbiqləri baxımından düşünsək, brauzerdə çalışan bir veb tətbiqi statusu və müvafiq məlumatları hər birinin REST API'sının arka tərəfində olan tələbi.

Bunu nəzərdən keçirin: REST API-nın bir dəsti kimi təqdim olunan bir məlumat / məlumat platforması var. Bütün məlumatlar kublarını işləyən özünü göstərən BI platforma ola bilər. Ancaq sizin (insan) müştərilərinizə (1) veb tətbiqi, (2) mobil tətbiq və (3) bir üçüncü tərəf proqramı vasitəsilə daxil olmasını istəyirik. Nəticədə MTM zənciri hətta HTM-ə doğru gəlir. Beləliklə, insan istifadəçiləri informasiya zəncirinin üstündə qalırlar.

İlk iki halda, maşınlar arasında bir qarşılıqlı vəziyyət var, məlumat həqiqətən insan tərəfindən istehlak edilir. Sonuncu halda REST API istifadə edən bir maşın proqramı var.

Doğrulama konsepsiyası bütün istiqamətlərdə tətbiq olunur. REST API-lərinizin tək, təhlükəsiz formada olması üçün necə inkişaf edirsiniz? Gördüyüm kimi iki yol vardır:

Yol-1:

  • Bir başlanğıc üçün heç bir giriş yoxdur. Hər bir sorğu daxil olur.
  • Müştəri hər bir istək ilə identifikasiya parametrlərini + xüsusi sorğu parametrlərini göndərir
  • REST API onları qəbul edir, ətrafa dönür, istifadəçi saxlama ping (hər hansı) və auth təsdiq edir
  • İcazə verilmişsə, sorğu xidmət edir; əks təqdirdə müvafiq HTTP statusu kodu ilə rədd edilir
  • Rehberinizdeki bütün REST API'lerindeki hər bir tələb üçün yuxarıdakıları təkrarlayın.

Yol-2:

  • Müştəri auth tələbi ilə başlayır
  • Giriş REST API bütün bu cür istəkləri həll edəcəkdir.
  • Bu, auth parametrləri (API key, uid / pwd və ya seçdiyiniz hər hansı) qəbul edir və istifadəçi deposunda (LDAP, AD və ya MySQL DB, və s.) Auth yoxlayır.
  • Təsdiq edildikdə, bir identifikasiya simgesi yaradılır və müştəri / abonent onu qaytarır.
  • Arayan daha sonra, bu identifikasiya möcüzəsini göndərir və hər bir sonrakı tələbi digər biznes REST API-lərinə daxil etmədən, girişdən və ya icarə müddəti bitmədən qədər müəyyən parametrləri tələb edir.

Aydındır ki, Way-2 API REST, tokenin etibarlı olduğunu tanımaq və ona güvənmək üçün bir yola ehtiyac duyacaq. API API, təsdiqləməni təsdiqlədi və buna görə də, açar sözlər üçün kataloqunuzdakı digər REST API'larına etibar etsin.

Əlbəttə ki, bu, identifikasiya açarı / tokeni REST API-larında saxlanmalı və paylanmalıdır. Bu ümumi, etibarlı əmanət deposu digər təşkilatların REST API-nın bir-birinə güvənməsinə imkan verən yerli / federasiya ola bilər.

Amma hörmət edirəm.

Əslində, "dövlət" (müştəri identifikasiyası statusu) bütün REST API'larının etibarlı bir dairə yarada bilməsi üçün saxlanmalı və paylaşılmalıdır. Bunu etmədiyimiz təqdirdə, bu yol-1dir, biz hər hansı bir / bütün gələn istəklər üçün autentifikasiya aktının həyata keçirilməsini bilməliyik.

Doğrulamayı yerinə yetirmək resurs-intensiv bir prosesdir. UID / pwd uyğunluğunu yoxlamaq üçün istifadəçi deposunda olan hər bir gələn sorğu üçün SQL sorgularını yürüttüğünüzü düşünün. Və ya hash oyunları (AWS stili) şifrələndirmək və yerinə yetirmək üçün. Və memarlıqda, hər REST API bunu etmək məcburiyyətində qalacaq, mən ümumi bir giriş xidməti istifadə edərək şübhələnirəm. Çünki etməsəniz, hər yerdə auth kodunu pozacaqsınız. Böyük qarışıqlıq.

Daha çox qat, daha çox gecikmə.

İndi Way-1-i götür və HTM-ə müraciət edin. Əgər uid / pwd / hash və ya hər bir sorğu ilə bir şey göndərməlisiniz, əgər istifadəçi (şəxs) həqiqətən qayğı göstərir? Hər saniyədə auth / giriş səhifəsini tərk edərək onu narahat etməsəniz. Müştəriləriniz varsa yaxşı şanslar. Beləliklə, nə edəcəyiniz giriş məlumatını brauzerinizin hər hansı bir yerində, brauzerinizin başında saxlayır və hər bir istəklə göndərir. İstifadəçi (istifadəçi) üçün o, artıq daxil olub və "sessiya" mövcuddur. Amma əslində hər bir tələb üçün öz təsdiqini tapmışdır.

Yol-2 ilə eyni. Sizin (istifadəçi) istifadəçinizi heç vaxt eşitməyəcəksiniz. Buna görə də heç bir zərər yox idi.

Yol-1-i MTM-ə tətbiq edəcəyik? Bu vəziyyətdə, maşını olduğundan, bu adamdan xilas ola bilərik, ona hər bir istək ilə kimlik məlumatı verməsini istəyərik. Heç kimə qayğı yoxdur! MTM üzrə Way-2 Running heç bir reaksiyaya səbəb olmayacaq; lanet arabası. Daha az qayğı ola bilər!

Sual belədir. Vətəndaşlığın ödəmə qiyməti var. Qiyməti ödəyin və davam edin. Bir purist olmaq istəyirsinizsə, sonra da ödəyəsiniz və davam edin.

Sonda fəlsəfə əhəmiyyətli deyil. Həqiqətən, informasiya əldə etmək, təqdimat və istehlak təcrübəsi. İnsanlar API-nı sevirlərsə, işinizi yerinə yetirdiniz.

129
24 нояб. Cavab 24 noyabrda Kingz tərəfindən verilir. 2013-11-24 01:19 '13 'da 1:19 2013-11-24 01:19

İşdə həqiqətən və tamamilə RESTful bir autentifikasiya həlli:

  • Doğrulama serverində ictimai / xüsusi açar cüt yaradın.
  • Ümumi açarı bütün serverlərə bölüşdürün.
  • Bir müştəri təsdiq edildikdə:

    3.1. aşağıdakıları ehtiva edən bir simptom verin:

    • Müddəti
    • istifadəçi adı (optional)
    • IP istifadəçiləri (isteğe bağlı)
    • parol yığma (isteğe bağlı)

    3.2. Xüsusi simvolu ilə simgeyi şifreleyin.

    3.3. İstifadəçiyə şifreli bir mö'cüzə göndərin.

  • Bir istifadəçi hər hansı bir API əldə edəndə, o da onun doğrulama möcüzəsinə keçməlidir.

  • Sunucular, auth serverin ictimai anahtarı ilə şifrələmə ilə simgenin etibarlı olduğunu təsdiq edə bilər.

Bu, vətəndaşlığı olmayan / RESTful identifikasiyasıdır.

Şifrə hash kodunun effektiv olmasına baxmayaraq, istifadəçi bir identifikasiyası simvolu ilə yanaşı shifrsiz parol göndərdi. Server parolun xassələri müqayisə edərək identifikasiya simgesini yaratmaq üçün istifadə olunan parolla uyğun olub-olmadığını yoxlaya bilər. Bu, HTTPS istifadə edərək təhlükəsiz bir əlaqə tələb edir. Müştəri tərəfində olan Javascript istifadəçi şifrəsini işləyib saxlaya və müştərinin yaddaşında və ya çerezdəki bir ictimai server vasitəsilə şifrələnə bilər.

47
15 окт. jcoffland tərəfindən verilmiş cavab 15 oktyabr 2013-10-15 00:29 '13 at 0:29 2013-10-15 00:29

Dürüstəm ki, buradakı mükəmməl cavabları görmüşəm, ancaq bir az məni narahat edən bir şey, kimsənin dogmatik olduğu hallarda vətəndaşsızlıq anlayışını tam qəbul edəcəkdir. O, yalnız təmiz OO qəbul etmək istəyən və bir şey bir şey deyilsə, o səhv edirsinizsə, o, köhnə Smalltalk azarkeşləri xatırladır. Bırak verin.

RESTİCİ yanaşma həyatınızı asanlaşdıracaq və iclasların xərclərini və xərclərini azaldacaq, onu təqib etməyə çalışacağı ehtimal edilir, çünki bu müdrik bir şeydir, ancaq intizamın (hər hansı bir intizam / təlimat) bu üstünlüyü təmin etmədiyi yerə əməl etdiyiniz anda. bunun üçün nəzərdə tutulmuşdu, sonra səhv etdin. Bu gün ən yaxşı dillərin bəziləri funksional proqramlaşdırma və obyekt yönümünə malikdir.

Probleminizi həll etmək üçün ən asan yol, bir cookie-da identifikasiya şifrəsini saxlamaq və HTTP başlığı ilə göndərməkdirsə, onda bunu edin, yalnız onu istismar etməyin. Sessiyaların ağır və böyük olduğunda, sessiyanızın bütün sessiyasında bir əsas olan qısa bir simli olsaydı, o zaman nə böyük bir işdir?

Mən şərhlərdə düzəlişlər etmək üçün açıqdıram, amma sadəcə bizim serverimizdə xeylərin böyük bir lüğətini saxlamamaq üçün həyatımın acınacaqlı hala gətirilməsində nöqtəni (indiyə qədər) görmürəm.

34
13 авг. Cavab verilir arg20 13 aug. 2013-08-13 23:09 '13 at 23:09 2013-08-13 23:09

Əvvəla, RESTful web service SAFE (və ya başqa sözlə, SESSİYONİZ). Beləliklə, RESTful xidmət bir iclas və ya cookie konsepsiyasına malik deyil və olmamalıdır. RESTful xidmətində təsdiqləmə üsulu RFC 2616 HTTP spesifikasiyasında göstərildiyi kimi HTTP avtorizasiya başlığını istifadə etməkdir.Hər fərdi istəkdə bir HTTP avtorizasiya başlığı olmalıdır və sorğu bir HTTP bağlantısı (SSL) üzərindən göndərilməlidir. Bu RESTful HTTP web xidmətlərində identifikasiya etmək və sorğuların icazəsini təsdiq etmək üçün doğru üsuldur. Cisco Systems-də Cisco PRIME Performance Manager proqramı üçün RESTful web xidmətini tətbiq etdim. Və bu web xidmətinin bir hissəsi kimi, mən də avtorizasiya / avtorizasiya tətbiq etdim.

Rubens Gomez.

31
27 марта '13 в 2:13 2013-03-27 02:13 Cavab 27 mart 2013 - il tarixində, 2:13, 2013-03-27 02:13 istifadəçi tərəfindən verilir

Это, конечно, не о "сеансовых ключах", поскольку обычно используется для ссылки на сеансовую аутентификацию, которая выполняется во всех ограничениях REST. Каждый запрос является самоописательным и содержит достаточную информацию для авторизации запроса самостоятельно без какого-либо состояния приложения на стороне сервера.

Самый простой способ приблизиться к этому - начать с встроенных механизмов аутентификации HTTP в RFC 2617 .

21
ответ дан Justin Sheehy 26 нояб. '08 в 6:06 2008-11-26 06:06

"Очень проницательная" статья, упомянутая @skrebel ( http://www.berenddeboer.net/rest/authentication.html ) обсуждает запутанный, но действительно нарушенный метод аутентификации.

Вы можете попробовать посетить страницу (которая должна отображаться только для аутентифицированного пользователя) http://www.berenddeboer.net/rest/site/authenticated.html без учетных данных для входа.

(Извините, я не могу прокомментировать ответ.)

Я бы сказал, что REST и аутентификация просто не смешиваются. REST означает "без гражданства", но "аутентифицированный" - это состояние. Вы не можете иметь их обоих на одном уровне. Если вы являетесь сторонником RESTful и нахмурились на государствах, тогда вам нужно пойти с HTTPS (то есть оставить проблему безопасности на другом уровне).

14
ответ дан Ji Han 15 окт. '12 в 22:35 2012-10-15 22:35

Я думаю, что спокойная аутентификация включает в себя передачу токена аутентификации в качестве параметра в запросе. Примерами являются использование apikeys api's. Я не считаю, что использование файлов cookie или http auth квалифицируется.

11
ответ дан Bjorn Tipling 19 янв. '09 в 9:45 2009-01-19 09:45

Я думаю, что для аутентификации службы REST можно использовать следующий подход:

  1. Создайте API входа RESTful, чтобы принять имя пользователя и пароль для аутентификации. Используйте метод HTTP POST для предотвращения кеширования и SSL для обеспечения безопасности во время транзита. При успешной аутентификации API возвращает два JWT - один токен доступа (более короткая достоверность, скажем, 30 минут) и один токен обновления (более длительный срок действия, например, 24 часа)
  2. Клиент (веб-интерфейс) хранит JWT в локальном хранилище и в каждом последующем вызове API пропускает токен доступа в заголовке "Авторизация: несущий #access"
  3. API проверяет действительность токена, проверяя дату подписи и истечения срока действия. Если токен действителен, проверьте, является ли пользователь (он интерпретирует требование "под" в JWT как имя пользователя) имеет доступ к API с помощью поиска в кеше. Если пользователь имеет право доступа к API, выполните бизнес-логику
  4. Если токен истек, API возвращает код ответа HTTP 400
  5. Клиент, получая 400/401, вызывает еще один REST API с токеном обновления в заголовке "Authorization: Bearer #refresh token", чтобы получить новый токен доступа.
  6. При получении вызова с токеном обновления проверьте, действителен ли токен обновления, проверяя подпись и дату истечения срока действия. Если токен обновления действителен, обновите кэш прав доступа пользователя из БД и верните новый токен доступа и обновите токен. Если токен обновления недействителен, верните код ответа HTTP 400
  7. Если возвращается токен доступа и токен обновления, перейдите к шагу 2. Если возвращается код ответа HTTP 400, клиент предполагает, что токен обновления истек и запрашивает у пользователя имя пользователя и пароль
  8. Для выхода из системы очистите локальное хранилище

При таком подходе мы делаем дорогостоящую операцию по загрузке кеша с подробными сведениями о доступе к пользователю каждые 30 минут. Поэтому, если доступ отменен или предоставляется новый доступ, требуется 30 минут для отражения или выход из системы, за которым следует логин.

7
ответ дан Saptarshi Basu 14 янв. '17 в 16:30 2017-01-14 16:30

Это способ сделать это: Использование OAuth 2.0 для входа в систему .

Вы можете использовать другие методы аутентификации, кроме Google, если он поддерживает OAuth.

6
ответ дан moshe beeri 09 дек. '11 в 1:44 2011-12-09 01:44

Чтобы ответить на этот вопрос из моего понимания...

Система аутентификации, которая использует REST, чтобы вам не нужно было отслеживать или управлять пользователями в вашей системе. Это делается с использованием методов HTTP POST, GET, PUT, DELETE. Мы используем эти 4 метода и рассматриваем их в терминах взаимодействия с базами данных как CREATE, READ, UPDATE, DELETE (но в Интернете мы используем POST и GET, потому что в настоящее время поддерживаются теги привязки). Поэтому, рассматривая POST и GET как наш CREATE/READ/UPDATE/DELETE (CRUD), мы можем разработать маршруты в нашем веб-приложении, которые смогут определить, какое действие CRUD мы добиваемся.

Например, в приложении Ruby on Rails мы можем создать наше веб-приложение таким образом, чтобы, если пользователь, который вошел в систему, посещает http://store.com/account/logout тогда GET этой страницы можно просмотреть как пользователь, пытающийся выйти из системы. В нашем контроллере rails мы создадим действие в том, что регистрирует пользователя и отправляет его обратно на домашнюю страницу.

A GET на странице входа даст форму. POST на странице входа будет рассматриваться как попытка входа в систему и взять данные POST и использовать его для входа в систему.

Для меня это практика использования HTTP-методов, сопоставленных с их базой данных, а затем создание системы аутентификации с учетом того, что вам не нужно передавать какие-либо сеансовые идентификаторы или сеансы отслеживания.

Я все еще учусь - если вы найдете что-то, что я сказал неправильно, пожалуйста, поправьте меня, и если вы узнаете больше о нем, вернитесь сюда. Təşəkkür edirik.

1
ответ дан mike 19 янв. '09 в 9:14 2009-01-19 09:14

Использование инфраструктуры открытого ключа, в которой регистрация ключа подразумевает правильное связывание, гарантирует, что открытый ключ привязан к тому человеку, которому он назначен, таким образом, который обеспечивает отказ от отказа

См. http://en.wikipedia.org/wiki/Public_key_infrastructure . Если вы соблюдаете надлежащие стандарты PKI, человек или агент, который неправильно использует украденный ключ, могут быть идентифицированы и заблокированы. Если агент должен использовать сертификат, привязка становится довольно жесткой. Умный и быстродвижущийся вор может убежать, но они оставляют больше крошек.

1
ответ дан DonB. 02 noyabr. '13 в 7:08 2013-11-02 07:08

Другие вопросы по меткам или Задайте вопрос