2012-08-06 6 views
48

Jestem zainteresowany tworzeniem kluczy API dla web.api i pozwalaniem klientom na komunikowanie się z API przy użyciu kluczy API zamiast autoryzacji web.api zapewnia.Web API tworzenie kluczy API

Chcę, aby wielu klientów mogło komunikować się z web.api. zamiast tworzyć nazwę użytkownika i hasło, mogę użyć klucza API i umożliwić klientom komunikację z klientem.

Czy istnieje taka wbudowana funkcjonalność?

jeśli ktoś chce go wdrożyć, jak by się do tego obejść?

Odpowiedz

55

Możesz to osiągnąć, używając HMAC Authentication. Zasadniczo może istnieć tabela bazy danych o nazwie ApiKey (apiKey, secretKey). Każdy klient ma każdy Apikey i tajny klucz:

  1. ApiKey jest jak klucz publiczny i zostaną wysłane za pośrednictwem protokołu HTTP (podobnie z nazwą użytkownika).

  2. Klucz tajny nie jest wysyłany za pośrednictwem protokołu HTTP, użyj tego tajnego klucza, aby wykonać hmac niektóre informacje i wysłać skasowane dane wyjściowe do serwera. Od strony serwera, w oparciu o klucz publiczny, można uzyskać odpowiedni klucz tajny i informacje mieszania, aby porównać z wynikiem mieszania.

Pisałem szczegółową odpowiedź w: How to secure an ASP.NET Web API

Można zmienić nazwę użytkownika ApiKey i zakodowane hasła przez tajnego klucza na moją odpowiedź do map ze swojego pomysłu.

+0

Więc będziesz potrzebował klienta do budowania skrótu na każdym żądaniu API? Jakie są związane z tym obciążenie? – EkoostikMartin

+0

Wydaje mi się, że tak właśnie działa HMAC. Czy mógłbyś rozwinąć swoje pytania? –

+0

Jeśli nazwiesz 'ComputeHash (string hashedPassword, string message)' w każdej metodzie wywoływanej przez klienta, ile czasu to doda do każdego połączenia? Jak długo średnio zajmuje "ComputeHash"? – EkoostikMartin

15

Istnieje interesujący artykuł o tym, jak używać procedur obsługi wiadomości HTTP, które pomogą Ci osiągnąć to, co chcesz.

Istnieje nawet przykład implementowania kluczy API w połowie strony!