Kullanıcıların yanı sıra diğer web hizmetleri ve uygulamaları tarafından erişilmesi gereken bir RESTful web hizmeti tasarlıyorum. Gelen tüm isteklerin doğrulanması gerekir. Tüm iletişim HTTPS üzerinden gerçekleşir. Kullanıcı kimlik doğrulaması, kullanıcı adı ve parolanın (bir SSL bağlantısı üzerinden) hizmet tarafından sağlanan bir / session kaynağına POST ile alınmasıyla elde edilen bir kimlik doğrulama belirtecine dayalı olarak çalışacaktır .
Web hizmeti istemcileri söz konusu olduğunda , istemci hizmetinin arkasında son kullanıcı yoktur . İstekler, planlanan görevler, olaylar veya diğer bazı bilgisayar işlemleri tarafından başlatılır. Bağlantı hizmetlerinin listesi önceden bilinmektedir (tabii ki, sanırım). Diğer (web) hizmetlerinden gelen bu istekleri nasıl doğrulamalıyım? Kimlik doğrulama sürecinin bu hizmetler için mümkün olduğunca kolay uygulanmasını, ancak güvenlik pahasına olmamasını istiyorum. Böyle bir senaryo için standart ve en iyi uygulamalar nelerdir?
Aklıma gelen (veya bana önerilmiş) seçenekler:
İstemci hizmetlerinin "sahte" bir kullanıcı adı ve parolaya başvurmasını sağlayın ve kullanıcılarla aynı şekilde kimliklerini doğrulayın. Bu seçeneği sevmiyorum - sadece doğru hissettirmiyor.
İstemci hizmeti için kalıcı bir uygulama kimliği, muhtemelen bir uygulama anahtarı da atayın. Anladığım kadarıyla bu, kullanıcı adı + şifreye sahip olmakla aynı şey. Bu kimlik ve anahtarla, her isteğin kimliğini doğrulayabilir veya diğer istekleri doğrulamak için bir kimlik doğrulama simgesi oluşturabilirim. Her iki durumda da, bu seçeneği sevmiyorum, çünkü uygulama kimliğini ve anahtarını ele geçirebilen herkes istemciyi taklit edebilir.
Önceki seçeneğe bir IP adresi kontrolü ekleyebilirim. Bu, sahte isteklerin gerçekleştirilmesini zorlaştırır.
İstemci sertifikaları. Kendi sertifika yetkilimi kur, kök sertifika oluştur ve istemci hizmetleri için istemci sertifikaları oluştur. Yine de birkaç sorun akla geliyor: a) Kullanıcıların sertifikalar olmadan kimlik doğrulamasına nasıl izin veriyorum ve b) bu senaryonun istemci hizmeti açısından uygulanması ne kadar karmaşık?
Başka bir şey - orada başka çözümler olmalı?
Hizmetim Java üzerinde çalışıyor olacaktı, ancak hangi özel çerçevenin üzerine inşa edileceğiyle ilgili bilgileri kasıtlı olarak dışarıda bıraktım, çünkü temel ilkelerle daha çok ilgileniyorum ve uygulama ayrıntılarıyla çok fazla ilgilenmiyorum - Bunun için en iyi çözümü varsayıyorum temel çerçeveden bağımsız olarak uygulanması mümkün olacaktır. Bununla birlikte, bu konuda biraz deneyimsizim, bu nedenle gerçek uygulama hakkında somut ipuçları ve örnekler (yararlı üçüncü taraf kitaplıkları, makaleler, vb.) Da çok takdir edilecektir.