Soru Google Cloud Uç Noktaları ve kullanıcının kimlik doğrulaması


Şu anda AppEngine dünyasına yeni katılıyorum ve geliştirdiğim bir mobil uygulama için Cloud Endpoint'leri kullanarak bir arka uç oluşturmak istiyorum.

Şu andaki problemlerden biri, kullanıcının kimlik doğrulaması hakkında. Udacity'nin App Engine'deki MOOC'sini takip ettim ve bir Google Hesapları kullanarak kullanıcının API isteği için kimliğini nasıl doğrulayacağımızı öğrettiler. Arka taraftaki tarafta, sadece bir User yöntemimize parametresi ve kullanıcının oturum açıp açmadığını kontrol edin. Bildiğim kadarıyla, bu kullanıcı parametresi, App Engine tarafından oluşturulur. Authorization isteğimizin başlığı. (Orada biraz onay gerekebilir)

Şimdi, anladığımdan emin değilim bir sürü şey var ve bu MOOC üzerinde iyi açıklanmadı.

Şimdi, bunun Google dışındaki diğer OAuth şemalarıyla uyumlu olup olmadığını bilmek ister misiniz? Yani, Facebook kimlik doğrulamasını uygulamak istiyorsam, facebook erişim belirtecini geçecek miyim?

Arama yaptığımdan, Android'deki Facebook SDK'sını kullanmam, kullanıcı kimliğimi tanımlayan bir Kullanıcı Erişimi Simgesi oluşturmamı sağladı. facebook'a. Arka uçuma gönderdikten sonra, Facebook ile geçerliliğini kontrol etmek istiyorum ve geçerliyse, başvuruma yeni bir kullanıcı oluştur. Şimdi, kullanıcıyı tanımlayan yeni bir işaret oluşturmak istiyorum. benim uygulamam. Bunu yapmak için ne yapmam gerekir?


25
2017-08-18 14:33


Menşei




Cevaplar:


Kendi kimlik doğrulayıcınızı Uç Noktalara sağlayabilirsiniz ve enjekte edilen Kullanıcı kimlik doğrulayıcınızla birlikte alınacaktır. https://developers.google.com/appengine/docs/java/endpoints/javadoc/com/google/api/server/spi/config/Authenticator.html.

Facebook kimlik bilgileri, bir başlık yoluyla, örn. Yetkilendirme üstbilgisine ve Authenticator.authenticate yönteminin içinde işleyebileceğiniz HttpServletRequest aracılığıyla arka uçtan erişilebilir.

Örneğin.

// Custom Authenticator class
public class MyAuthenticator implements Authenticator {
  @Override
  public User authenticate(HttpServletRequest request) {
    String token = request.getHeader("Authorization");
    if (token != null) {
      String user = authenticateFacebook(token);  // apply your Facebook auth.
      if (user != null) {
        return new User(user);
      }
    }
    return null;
  }
}

// Endpoints class.
@Api(name = "example", authenticators = {MyAuthenticator.class})
public class MyEndpoints {
  public Container getThing(User user) {
    Container c = new Container();
    if (user != null) {
      c.email = user.getEmail();
    }
    return c;
  }

  public class Container {
    public String email;
    public String extraData;
  }
}

52
2017-08-19 18:57



Harika, harika görünüyor! Bunu en kısa zamanda deneyeceğim! - MagicMicky
Şu anda bunu uygulamaya çalışıyorum. Cloud Endpoints tarafından kullanılan varsayılan kimlik doğrulayıcısı nedir hakkında bir fikrin var mı? Kullanıcının Google Hesabını kullanarak hâlâ yetkili olmasını istiyorsanız, varsayılan Google Authenticator'a nasıl erişebilirim? - MagicMicky
Varsayılan kimlik doğrulayıcısı com.google.api.server.spi.auth.EndpointsAuthenticator'dır. Kullanıcı tarafından sağlanan kimlik doğrulayıcısı başarısız olduğunda, geri dönüş olarak yapmak için @authenticators listesinin sonuna ekleyebilirsiniz. Uç noktalar tüm doğrulayıcıları dener ve ilk başarılı olanı döndürür. - Min Wan
Çok teşekkürler. Cloud Uç Noktaları için harika işlevsellik. Çok kötü şu anda bu konuda yeterli dokümantasyon yok! - MagicMicky
@MinWan Burada açıklanan senaryoda Kullanıcı parametresinin uygun şekilde ele alınması ile ilgili ayrı bir soru sordum: stackoverflow.com/questions/28445840/... - Oliver Hausler


Örneğini denediğimde her zaman bir tane alırım: java.lang.NullPointerException: authDomain belirtilmelidir. Ancak User nesnesinde bir authDomain ayarlayamıyorum. Herhangi bir fikir?

GÜNCELLEME: Bu Hataya bağlı https://code.google.com/p/googleappengine/issues/detail?id=12060&q=endpoints&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log

1.9.22 sürümünde


1
2018-06-30 21:14