2017-06-12 17 views
6

Bu giriş/kayıt mantığı uygulamasının planım (yetki kodu akışı).OAuth2, üçüncü taraf giriş/kayıt işlemlerini uygulamak için nasıl kullanılır?

kullanıcı için onun/onu OpenID vermeyi kabul ediyorsanız SPA önyüzü

GET https://www.example.com/oauth2 
client_id=dummyclient 
redirect_uri=https://mysite/callback 
response_type=code 
scope=openid 

Sonra üçüncü taraf bir GET isteği gönderir İlk (üçüncü taraf sadece OAuth2 API şartıyla) mysite sonra fronend 301 HTTP cevabı alır.

---> 301 https://mysite/callback?code=dummycode 

Ardından tarayıcı mysite/callback sayfayı yönlendirir ve onu SPA yeniden yüklemek ve daha sonra gerçek arka uç geri arama için kod iletecektir SPA tarafından yakalanabilir URL'ye kod gösterecektir. Arka uç kodunu aldığınızda
GET https://mysite/api/real-callback?code=dummycode 

, bir access_token alışverişinde üçüncü tarafa kod gönderecektir. Arka uç, access_token'u aldığında, kullanıcının openid'ini almak için bir API isteğini tetikler ve ardından kullanıcının yeni bir kullanıcı olarak giriş yapmasına veya kaydetmesine izin verilip verilmeyeceğine karar verir. Sonunda, OAuth2 sistemimdeki access_token'u içeren SPA önyüzümüze bir HTTP yanıtı veya 401 yetkisiz bir yanıt vereceğiz.

Benim soru (gerçek geri arama benim kendi müşteriler tarafından çağrılır kanıtlamak için bazı saldırganın alırsanız benim önyüzü client_id gömülü Çünkü o sahte OAuth2 istek ve kullanıcıyı phishing kabul etmek nasıl olduğunu. Sonra o Saldırgan geçerli bir kod alacak ve daha sonra kodu gerçek geri bildirime geri gönderecek. Son olarak, sistemde kullanıcının access_token numarasını alacaktır.) Son kullanıcının şifresi gibi ek bilgiler sağlamadan kimlik doğrulama yapmak için OAuth2'yi nasıl kullanabilirim.

+0

OAuth2 sunucusundan 'real-callback' URL'sini bir yönlendirme URL'si olarak almamanızın nedeni nedir? SPA kodunu, ön yüz koduna almak için bir neden göremiyorum. –

+0

@ JánHalaša Bu adım olmadan bile, sistemimin 'access_token'unu üçüncü tarafın OAuth2 geri arama isteğinden sonra ön tarafa gönderdiğim sürece güvenlik sorunu devam ediyor. Gerçek geri bildirimi tasarlamamın sebebi, ön uç ile arka uç arasındaki gerçek ayrımı sağlamak. – bitweaver

+0

Ve SPA'da 'access_token' için neye ihtiyacınız var? –

cevap

1

OAuth2 akışını Implicit olarak değiştirmenizi ve access_token ve id_token (OpenID Connect) seçeneklerini belirtmenizi öneririz. SPA'nız jetonları alacak, kimlik kartını arka ucunuza gönderecek ve bu tür bir kullanıcı yaratmanın mümkün olup olmadığına karar vermek için kullanacaktır. SPA, korunan kaynakları aramak için erişim belirtecini kullanabilir.

Bu şekilde,

  • sadece bir OAuth2 istemci olacak SPA - Eğer sahip olacak
  • belirteçleri iki uygulama (SPA ve arka uç) tarafından kullanılmayacaktır, sadece bir URI yönlendirme,
  • Arka uçtan SPA'ya jeton transfer etmeniz gerekmeyecektir.

Güncelleme: (eğer id_token kullanamıyorsanız OpenID Bağlan

, kendi arka uca access_token gönderebilir ve arka uç Introspection son nokta https://tools.ietf.org/html/rfc7662 için belirteci göndererek kullanıcının kullanıcı adı alabilirsiniz olmadan yanıttan username özniteliği). username özniteliği isteğe bağlıdır. OAuth2 sunucunuz daha fazla bilgi (isim ve e-posta gibi) verebilir.

Bu Introspection bitiş noktası, kimlik doğrulaması gerektirir; dolayısıyla, arka ucunuz, kendi client_id numaralı kayıtlı bir OAuth2 istemcisi ve bir gizli olmak zorundadır.

İlgili konular