Nasıl ASP.NET Web API sağlamak için
Bir inşa etmek istiyorumDinlendiriciweb hizmeti ASP.NET Web kullanarak üçüncü parti geliştiriciler benim uygulama verilerine erişim için kullanacağı API.
Hakkında çok şey okudumOAuthve standart gibi görünüyor, ama belgelerine nasıl çalıştığını anlatan (ve bu gerçekten işe yarıyor!) ile iyi bir örnek bulmak inanılmaz zor (özellikle OAuth için bir acemi için) gibi görünüyor.
Aslında kurar ve çalışır ve bunu uygulamak için nasıl gösteren bir örnek var mı?
Sayısız örnekleri indirdim:
- DotNetOAuth - Dokümantasyon acemi bir bakış açısından umutsuz
- Thinktecture - inşa edemiyor
Ayrıca bloglar belirteci tabanlı basit bir düzeni (this)-Bu yeniden icat tekerlek gibi görünüyor düşündüren baktım ama kavramsal olmanın avantajı oldukça basit.
Ama iyi cevap bu gibi birçok soru var gibi görünmüyor.
Herkes bu alanda ne yapıyor?
CEVAP
HMAC doğrulama Web Apı güvenli uygulamak başardık ve başarılı oldu. Temelde, HMAC doğrulama hem tüketici hem de sunucu karma bir mesaj hmac bilmek, HMAC256 kullanılması gereken her tüketici için gizli bir anahtar kullanır. Vakaların çoğu, tüketici karma parola gizli anahtar olarak kullanılır.
Mesajı normalde olabilir) HTTP isteği verileri, veya özelleştirilmiş veri bile inşa edilmiştir:
- Bu istek (UTC veya GMT time) gönderildiği zaman . zaman damgası:
- HTTP fiil: GET, POST, PUT, DELETE.
- post veri ve sorgu dizesi
- URL
Kaputun altında, HMAC doğrulama:
Tüketici server, imza (hmac esrar çıktı) oluşturduktan sonra web için HTTP isteği, HTTP istek şablonu gönderir:
User-Agent: {agent}
Host: {host}
Timestamp: {timestamp}
Authentication: {username}:{signature}
ALMAK için örnek istek:
GET /webapi.hmac/api/values
User-Agent: Fiddler
Host: localhost
Timestamp: Thursday, August 02, 2012 3:30:32 PM
Authentication: cuongle:LohrhqqoDy6PhLrHAXi7dUVACyJZilQtlDzNbLqzXlw=
İmza almak için hash mesaj:
GET\n
Thursday, August 02, 2012 3:30:32 PM\n
/webapi.hmac/api/values\n
Sorgu dizesi ile SONRASI için örnek istek (imza altına doğru değil, sadece bir örnek)
POST /webapi.hmac/api/values?key2=value2
User-Agent: Fiddler
Host: localhost
Content-Type: application/x-www-form-urlencoded
Timestamp: Thursday, August 02, 2012 3:30:32 PM
Authentication: cuongle:LohrhqqoDy6PhLrHAXi7dUVACyJZilQtlDzNbLqzXlw=
key1=value1&key3=value3
İmza almak için hash mesaj
GET\n
Thursday, August 02, 2012 3:30:32 PM\n
/webapi.hmac/api/values\n
key1=value1&key2=value2&key3=value3
Lütfen formu veri ve sorgu dizesi sunucu üzerinde kod ve veri doğru mesajı oluşturmak için form sorgu dizesi almak için olması gerektiğini unutmayın.
Ne zaman bir HTTP isteği geliyor sunucusu, bir kimlik doğrulama eylem filtre uygulanan ayrıştırma istek bilgi almak için: HTTP fiil, zaman damgası, uri, form verileri ve sorgu dizesi, o zaman göre bu yapı imzası (hmac karma) ile gizli anahtar (karma şifre) server.
Gizli anahtar isteği üzerine kullanıcı adı ile veritabanı var.
Sonra sunucu kodu eşit ise imza yerleşik isteği üzerine imza karşılaştırır, kimlik doğrulama geçirilir, aksi halde başarısız oldu.
Kodu imza oluşturmak için:
private static string ComputeHash(string hashedPassword, string message)
{
var key = Encoding.UTF8.GetBytes(hashedPassword.ToUpper());
string hashString;
using (var hmac = new HMACSHA256(key))
{
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
hashString = Convert.ToBase64String(hash);
}
return hashString;
}
Nasıl replay saldırıyı önlemek için?
Zaman damgası için kısıtlama eklemek gibi bir şey
servertime - X minutes|seconds <= timestamp <= servertime X minutes|seconds
(servertime: istek zaman sunucuya geliyor)
Ve, Tampon Bellek, istek imza (kullanım MemoryCache, zaman sınırı içinde tutmak gerekir). Eğer bir sonraki isteği önceki isteği ile aynı imza ile gelirse, reddedilecektir.
Demo kod olarak buraya koyun: https://github.com/cuongle/Hmac.WebApi
Nasıl run " kullanıcı adı ve parola sa...
Nasıl Android bir etkinlik ararken ani...
Nasıl bir python betiği bir hizmet ya ...
C fabrika desen#: Nasıl bir nesne örne...
nasıl benim sınıf için takas fonksiyon...