2016-01-04 32 views
6

Bir başlangıç ​​seviyesini OAUTH ve doğru bir şey olup olmadığını sormak istedim.client_id ve client_secret öğelerini anlama

  1. kullanıcı şifreyi bir grant_type bir kullanıcı adı/şifre geçen benim jeton bitiş noktasına bir istekte: Ben Owin ve C# ve ben kurulumu aşağıdaki senaryo kullanıyorum. Kimlik bilgileri geçerliyse, ben bir JWT oluşturur.

  2. kullanıcı JWT'yi dönene ve sonra istemci tüm istekleri

  3. Bu istek yapmak için izin kullanıcıyı sağlamak jetonun iddialarını kullanmak yetkilendirme gerektiren tüm istekler için ileriye olduğunu belirteci kullanır.

Bu nedenle, client_id ve client_secret bu noktaya nereden geliyor? Bu sadece ek bir güvenlik katmanı mıdır? Bir token bile almadan önce, başka bir kimlik bilgilerini (id/secret) geçirmeniz ve sadece bu geçerli ise, kullanıcı adınız/şifre sağlanan, bir JWT'yi geri alabilirsiniz

iki ilişki kim olduğunu anlamak ister misiniz - Teşekkür öylesine çok

+0

olanlar hem emin olmak için belirteci validasyonu kullanılır taraflar eşleşir. Google haritalar API anahtarı kullandığınızda gibi. Kaydettiğinizde sizin tarafınızdan bir tane yaratılır ve her bir isteğinize gireceğiniz aynı anahtarı alırsınız. –

cevap

3

Hem client_id hem de client_secret şifre akışında kullanılmaz. Ancak, muhtemelen farkında olduğunuz gibi, OAuth2 diğer senaryolar için uygun başka akışlara sahiptir. Yani

:

  • kullanıcıların sunucu tarafı kimlik doğrulaması web uygulamalarında kullanılan yetkilendirme kodu akışı. Client_id, ilk yönlendirmede kullanılır; client_secret, uygulamanın bir simge için bir zaman kodunu değiştirdiği son adımda kullanılır.

  • istemci kimlik uygulamaları yerine bireysel kullanıcıları

tüm çeşitli akışlarının bir özlü referans kimliğini doğrulamak için kullanılan akışı: https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified

+0

Sadece bir kullanıcının sistemde oturum açmasına izin vermeyi hedeflediğimde, client_id veya client_secret'e ihtiyaç duymayacak gibi geliyor mu? Ya da eğer öyleyse, neden sadece bir kullanıcı adı/parola ile bir kullanıcı adı/parola giriş yapmasına izin veremiyorum ve işim bitti? – NullHypothesis

+0

@ user3379785: Neden? Kullanıcı adı/şifre öğrenmek için uygulamanızın her ikisini de sorması gerekiyor. Ve hiç kimse, bilinmeyen bir sayfada onları sağlayarak google/facebook kimlik bilgilerini sağlama konusunda riske girmeyecek. Yetkilendirme kodu akışı ** tarayıcıyı sağlayıcı sayfasına yönlendirir, böylece sayfalarında kimlik bilgileri sağlanır ve istenmeyen sızıntılara yer bırakmaz. –

+0

Ön uçım arka uç API'm ile aynı alanda. Ve sadece benim app kullanıcının kullanıcı adı/şifre ile bir JWT almak için arama yapan biridir. Yani benim durumumda, bir client_id veya sırrına gerek yok mu? Doğrudan bir JS'nin benim API'ma çağırmasından beri bir sırrı nasıl kullanacağımı göremedim ve arka uç API'm kimlik bilgilerini kontrol etmekle ve o zaman client_id/client_secret'e ihtiyaç duymayacağınız gibi JWT – NullHypothesis

0

doğrulanmış gereken iki parti vardır:?! uygulama ve kullanıcı

.

Uygulama kimliği ve gizli, muhtemelen rec geri olmalıdır URL, geri çağrı URL tarafından yedeklenen tarafından doğrulanır Belirtecin açık olması doğru olanıdır.

Kullanıcı, OAuth sağlayıcısı aracılığıyla doğrulanır. Bunun için bir kullanıcı adı/şifre kullanabilir veya OAuth sağlayıcısı gerekli gördüğü her şeyi kullanabilir. Bu belirteç, uygulamanın kullanıcı adını ve şifresini bilmeden kullanıcı verilerini almasına izin vermek için kullanılır.

+0

Yani bu, yetkisiz uygulamaların benim API'm arama yapmasını engellemektir? Arama API'mdaki anonim bir işlem olsa bile, kullanımı yalnızca istemciye erişebilecek şekilde kısıtlayabilirim. tamam teşekkürler. Öyleyse genellikle her isteğinizde API anahtarını/sırrını ve belirtecini her zaman geçmek istersiniz? – NullHypothesis

+0

Evet, temel bir kimlik doğrulama mekanizmasıdır. –