SORU
29 EKİM 2008, ÇARŞAMBA


Güvenli bir DİNLENME binası için öneriler arıyorsunuz API Raylar üzerinde Yakut içinde

Bir DİNLENME üzerinde çalıştığım bir proje için API bina başladım, ve bana bir API RoR kullanarak oluşturmak için en iyi yolu olarak küçük bir araştırma yapmak için led. Varsayılan olarak, modeller, dünyaya açık ve URL) adlı oldukça hızlı bir şekilde sadece bir koyarak buluyorum ".xml" URL sonuna ve uygun parametreleri passing.

O zaman bir sonraki soru geldi. Nasıl bir yetkisiz değişiklik yapılmasını engellemeye uygulamam güvenli? Biraz araştırma yaparken bir kaç makale nasıl kullanılır attr_accessible attr_protected söz ve buldum. Belirli bir URL Mayıs ayında yayınlanan önceydi bu bahsettiğim bulundu '07 (here).

Her şeyde olduğu gibi ruby, o zamandan beri çok şey gelişti eminim. Benim sorum, bu hala bir DİNLENME RoR içinde API sağlamak için en iyi yolu nedir?

Ya bir "yeni proje" ya da bir "proje"senaryo? mevcut ne önerirsin yoksa

CEVAP
30 EKİM 2008, PERŞEMBE


API isteklerinin kimlik doğrulaması için çeşitli düzenleri vardır, ve normal kimlik doğrulama restful_authentication gibi eklentileri tarafından sağlanan daha farklılar ya acts_as_authenticated. En önemlisi, istemcilerin bir giriş kavramı yok yani oturumları korumak olmayacak.

HTTP kimlik Doğrulaması

Temel HTTP kimlik doğrulaması kullanabilirsiniz. Bunun için, API istemcileri düzenli bir kullanıcı adı ve şifre kullanın ve şöyle: URL koyacağız

http://myusername:mypass@www.someapp.com/

Bu restful_authentication kutudan bu destekler inanıyorum, ya da birisi bir tarayıcı ile API üzerinden veya uygulamayı kullanarak olup olmadığını göz ardı edebilirsiniz.

Tek dezavantajı burada kullanıcılar her istekte kullanıcı adı ve parola temize kendi koymak istiyorsun. SSL üzerinden yaparak, bu güvenli yapabilirsiniz.

Böyle kullanan bir API ama gördüğüm sanmıyorum. Özellikle sorunun ne olduğunu bilmiyorum o yüzden kutunun dışında geçerli kimlik doğrulama düzenleri tarafından desteklenen beri bir adam gibi bana iyi bir fikir gibi görünüyor.

API Anahtarı

API kimlik doğrulamasını etkinleştirmek için başka bir kolay yolu API anahtarı kullanmaktır. Aslında uzak bir hizmet için bir kullanıcı adı. Birinin senin API kullanmak için açtığında, onları bir API anahtarı ver. Bu her isteği ile kabul edilmesi gerekiyor.

Tek dezavantajı burada kimse başkasının API anahtarı bulursa, bu kullanıcı isteklerini yapabilirler. Tüm API istekleri HTTPS (SSL) kullanılarak, bu risk biraz ofset edebileceğinizi düşünüyorum.

Başka bir dezavantajı, kullanıcıların gittikleri her yerde aynı kimlik doğrulama bilgilerini (API anahtarı) kullanın. Eğer bir API istemcisi erişimini iptal etmek isterlerse, onların tek seçenek, tüm diğer müşteriler de devre dışı bırakacak API anahtarı değiştirin. Bu kullanıcılar birden fazla API anahtarları oluşturmak için izin vererek azaltılabilir.

Anahtar Gizli Anahtar imza API

İtiraz(tür) - OAuth aşağıya bakınız

Önemli ölçüde daha karmaşıktır gizli bir anahtar ile imzalama isteği. Bu ne Amazon Web Hizmetleri (S3, EC2, ve) yapmak gibi. Aslında, kullanıcı 2 anahtarları ver: API anahtarı (örn. username) ve gizli (örn. anahtar parola). API anahtarı her isteği ile iletilir, ama gizli anahtarı değildir. Bunun yerine, her isteği, genellikle başka bir parametre ekleyerek imzalamak için kullanılır.

IIRC, Amazon istemek için tüm parametreleri alarak, parametre adını sipariş ederek bunu gerçekleştirir. O zaman, bu dize, karma anahtar olarak kullanıcı gizli anahtarı ile karıştırılır. Bu yeni değer isteği gönderilmeden önce yeni bir parametre olarak eklenir. Amazon tarafında, aynı işi yapıyorlar. Tüm parametreleri (imza hariç), onlara emir ve karma gizli anahtarı kullanarak alıyorlar. Eğer bu imza ile eşleşirse, isteği meşru olduğunu biliyorlar.

Burada olumsuz karmaşıklığı. Bu program düzgün çalışması için almak zordur, API geliştirici ve hem de müşteriler için. İşlerin gidemeyen istemcisi geliştiricilerin destek aramaları ve öfkeli e-postalar bir sürü bekliyoruz.

OAuth

Gizli anahtar imza ile karmaşıklığı bazı sorunları mücadele etmek için, bir standart OAuth adında ortaya çıkmıştır. Çekirdek OAuth en önemli sırrı imzalamak gibi bir lezzet, ama çok standart ve libraries for many languages içine dahil edilmiştir.

Genel olarak, her iki API üretici ve tüketici üzerinde çok daha kolay kendi anahtarı/imza sistemi oluşturmak yerine OAuth kullanmak için.

OAuth da doğal olarak erişim, API her tüketici için farklı erişim kimlik bilgileri sağlayan kesimleri. Bu kullanıcılar seçici alıcı diğer uygulamaları etkilemeden erişimi iptal etmek için izin verir.

Ruby için özel olarak, destek kutudan OAuth hem üretici hem de tüketiciler için sağlar OAuth gem var. Bu taş bir API inşa etmek ve ayrıca OAuth API tüketmek için kullanılan ve çok etkilendim. Eğer uygulama OAuth basit API anahtarı düzeni (karşıt olarak) ihtiyacı olduğunu düşünüyorsanız, o zaman kolayca OAuth gem kullanmanızı tavsiye edebilirim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Friday Night Cranks

    Friday Night

    27 Mayıs 2007
  • super1988guy

    super1988guy

    9 Aralık 2007
  • UlyssesForever's channel

    UlyssesForev

    28 ŞUBAT 2012