2012-03-09 25 views
5

Benim PHP app içine Google Apps entegre etmeye çalışıyorum. Zaten kullanıcı giriş yaptığında veritabanında depolanır, (kullanıcı adı ve şifre girildikten sonra) bir kullanıcıya bir oturum kimliği atayan giriş sistemi var. Oturum Kimliği adlı kullanıcı tarafından yapılandırılabilir hareketsizlik belirli bir süre sonra (geçersiz hale 5 dakika, 15, 60 ... olabilir. Bu oturum kimliği, bir kullanıcının hala giriş yaptığını kontrol etmek için URL'de iletilir. Oturum kapatırken, oturum kimliği veritabanından kaldırılır.tarihinde Uygulamaları ve OAuth iyi uygulamalar

Kullanıcıların Google kimliklerini giriş yaptıkları sırada veritabanına depolayarak Google ile giriş yapmasına izin veriyorum, erişim belirteci talep ediyorum, userinfo'yu sorgula, google kimliğinin veritabanında olup olmadığına bakın ve eğer öyleyse Bu kullanıcıya oturum kimliği. Diğer API'ları sorgulayabildiğim için, veri tabanındaki erişim belirteci jsonunu da saklıyorum. Bir kullanıcı oturumu kapattığında, erişim belirteci veritabanından da kaldırılır.

  • : Ancak bazı şeyler benim iş akışı konusunda belirsiz hissettirecek aksak hissediyorum

    Bu benim kullanıcıların kendi Google hesabını kullanarak giriş edebiliyoruz, işler ve API en saklı access_token kullanarak sorgulayabilir Eğer bir refresh_token olsun force_approval olursa, ben yeni bir erişim jetonu almak üzere bu yenileme jetonu kullanarak yerine veritabanından eskisini kaldırıp tekrar yenisini kullanıcı günlükleri girecekler gibi hissediyorum. Öte yandan, giriş yaparken, henüz kim olduğunu bilmiyorum, bu yüzden kullanmak için hangi yenileme jetonunu bilmiyorum. Belki de yenileme belirtecinin ne için olduğunu anlamıyorum. Ayrıca, her seferinde onaylamayı zorlamak istemiyorum, bu durumda refresh_token'ı bile kullanamıyorum.

  • olarak kullanıcılar, oturum ne kadar süreceğini belirlemek için önce söz konusu, ancak, google ACCESS_TOKEN hep 3600 saniye sonra sona erer. kullanıcılar bunları tekrar giriş yapmak zorlayarak, sistemde ve Google API en aniden başarısız bundan sonra bir saat çalışacak eğer gerçekten aptal olurdu. Google OAuth oyun alanı, "Süre dolmadan önce otomatik olarak yenileyin" onay kutusunu gösterir, ancak bunu nasıl yapacağımı bilmiyorum. Yenileme jetonunu kullanmak zorunda mıyım? Ya da sadece arka planda yeni bir jeton ister (onayını zorlamıyorsam)?

  • Şu anda kullanıcı kimliğini bulmak için userinfo sorgusunu (https://www.googleapis.com/oauth2/v2/userinfo) kullanıyorum, ama aynı zamanda tokeninfo'yu da kullanabilirim (https://www.googleapis.com/oauth2/v1/tokeninfo). Tokeninfo oauth oyun alanında yer almıyorsa, ancak sonuç (ancak, ben de kendim hesaplayabilir) belirteci geçerli kalacağı süreyi göstermektedir. Diğeri üzerinde tercih edilir mi?

  • Tüm json nesnesini veritabanında saklıyorum (access_token, id_token, expires_in ve token_type) ancak sadece access_token depoladığımda uygulamamın yine de mükemmel şekilde çalışacağını hissediyorum (yalnızca expires_in zamanını tahmin ediyorum) değişiklikler). Örneğin, id_tokenini depolamam gerekiyor mu? Herkes bilgilerin herhangi diğer iyi kaynaklar biliyorsa

ben de onlarla ilgileniyorum, bazen çok eksik (developers.google.com adresinde) Google, belgeleri bulabilirsiniz.

cevap

4

Userinfo uç noktası gibi kavramların nereden geldiği en son OpenID Connect Specs'a bakmış olsanız yardımcı olabilir. OpenID bağlantısı OAuth 2'nin üzerine kurulmuştur. Orada çok fazla var, ama yine de bir göz atmaya değer. This blog article da (aynı blogda diğerleri gibi) çok iyi.

Maalesef, Google’ın uygulamasının şu anda en son spesifikasyon taslağı ile güncel olduğunu sanmıyorum, bu nedenle muhtemelen bir süre için hareketli bir hedef olacaktır. Bu şeyler geçen yıl boyunca çok değişti.

Sana yeni erişim simgesi her zaman size oldukça eski bir serinletici yerine, kullanıcının kimliğini doğrulamak elde edilmelidir ilk noktada katılıyorum. Giriş yapana kadar kullanıcının kim olduğunu bilmiyor ve size bir erişim belirteci vermiş oluyorsunuz. Genel olarak, bir erişim belirtecinin ömrü kullanıcının oturumuna bağlı değildir. Yayınlandıktan sonra, uygulamanız teorik olarak kullanıcının varlığından bağımsız olarak kaynaklara erişmek için kullanabilir. Kaynağın belirteç son kullanma süresinin ötesinde erişmeye devam etmek istiyorsanız, yeni erişim belirteci almak için bu noktada yenileme belirtecini göndermeniz gerekir. Korkarım, "otomatik yenileme" özelliğinin ne için olduğunu bilmiyorum.

Google'ın tokeninfo'un OpenID bağlantısının check_id uç noktasına benzediğine inanıyorum, ancak yalnızca sonuncudan ziyade bir erişim belirteci veya bir id jetonu kabul eder. İkinin süresinin dolma zamanlarının farklı olabileceğini unutmayın. Genellikle uç noktasından daha detaylı kullanıcı verilerini normalde çıplak user_id döndürecek olan check_id'dan elde edebilirsiniz.

Sen id_token saklamak gerekmez. Bu, yetkilendirme sunucusu tarafından kullanıcının kimlik doğrulamasının bir kaydı gibidir. Erişim belirteci, uygulamanızın kullanıcı kimliğini doğruladıktan sonra bakım işleminin ne ile ilgileneceğini gösterir.

+0

Girdiğiniz için çok teşekkürler, sağladığınız makaleleri okuyacağım ve yol boyunca bana yardımcı olacağını umuyorum. – Bram