Nie ma czegoś takiego jak najlepszy sposób, a odpowiedź jest zawsze it depends
, choć jest to bardzo pomocne. Możesz użyć na przykład forms authentication. Jeśli aplikacja internetowa korzystająca z usługi internetowej i usługi sieciowej jest częścią tego samego ASP.NET application
, przeglądarka może bezproblemowo wysłać bilet uwierzytelniania formularzy (cookie) dla każdego połączenia z usługą sieciową.
w pliku konfiguracyjnym, można mieć
<authorization>
<deny users="?" />
</authorization>
Spowoduje to zablokowanie dostępu do anonimowych użytkowników i który obejmie usług internetowych, jak również. Innymi słowy, dopóki użytkownik nie zaloguje się i nie otrzyma ważnego pliku cookie z biletem, usługa nie może być używana. Oczywiście, musisz HTTPS
. W przeciwnym razie każdy w środku może pobrać plik cookie w nagłówkach i zadzwonić do usługi.
Wreszcie, nie można zagwarantować, że nikt nie będzie dzwonił do usługi internetowej poza Twoją aplikacją w absolutnym sensie. Powyższe podejście gwarantuje, że żaden w środku nie zadzwoni do Twojej usługi. Ale nie ma sposobu, aby upewnić się, że ważny użytkownik wywołuje usługę bezpośrednio poza aplikacją, ponieważ osoba wywołująca usługi WWW jest JavaScriptem, a wszelkie zabezpieczenia, które budujesz w JavaScript, mogą być łatwo wykryte przez użytkownika, patrząc na skrypt lub nawet patrząc na ruch z przeglądarki i do przeglądarki. Każdy użytkownik końcowy, który jest nieco techniczny, będzie mógł odtwarzać żądania lub modyfikować żądania i przesyłać je do usługi sieciowej przy użyciu prawidłowych poświadczeń.
EDIT: -
Oto więcej szczegółów szukasz włączyć FormsAuthentication.
(1) W , pod <system.web>
, upewnij się, że to masz.
<authentication mode="Forms">
<forms loginUrl="Login.aspx" defaultUrl="~/" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
Zapewni to przekierowanie wszystkich nieuwierzytelnionych (anonimowych) użytkowników do Login.aspx.
(2) Wprowadź Login.aspx
z logiką logowania, aby uzyskać identyfikator użytkownika i hasło i sprawdź je w bazie danych. Po pomyślnym uwierzytelnieniu, to znaczy, że wprowadzony przez użytkownika identyfikator i hasło pasują do tego, co masz w bazie danych, mogą znajdować się w przycisku obsługi przycisku kliknięcia, ustawić bilet.
protected void Button1_Click(object sender, EventArgs e)
{
// Do all your login logic here
// once user ID and password entered by the user are okay, call this
string ticket = FormsAuthentication.Encrypt(
new FormsAuthenticationTicket("userId", false, 15));
HttpCookie FormsCookie = new HttpCookie(
FormsAuthentication.FormsCookieName, ticket) { HttpOnly = true };
HttpContext.Current.Response.Cookies.Add(FormsCookie);
}
(3) Dodaj PrincipalPermissionAttribute
sposobu internetowych, takich jak to.
public class Users : System.Web.Services.WebService
{
[PrincipalPermissionAttribute(SecurityAction.Demand)]
[WebMethod]
public List<User> GetUsers()
{
// Same code as what you have now
}
}
Jeśli teraz przejść do dowolnej strony, użytkownik zostanie przekierowany do Login.aspx gdzie trzeba będzie wprowadzić nazwę użytkownika i hasło i login. Podczas logowania plik cookie uwierzytelniania formularzy zostanie utworzony i zapisany w odpowiedzi.Od tej chwili wszystkie wnioski do twojej aplikacji będą zawierały plik cookie (przeglądarka zrobi to za Ciebie). Bez logowania się, jeśli przejdziesz bezpośrednio do serwisu internetowego, nadal będziesz przekierowywany na stronę logowania. Jak już wspomniałem w mojej oryginalnej odpowiedzi, zalogowany użytkownik nadal będzie mógł uzyskać bezpośredni dostęp do usługi sieciowej. Jeśli JavaScript może coś zrobić, użytkownik może zrobić to samo.
BTW, usługi sieciowe (asmx) to przestarzała technologia.
Jaki jest aplikacją, która wywołuje usługę internetową? ASP.NET Web Forms, MVC? Czy .asmx jest częścią tej samej aplikacji? W jaki sposób aplikacja internetowa, która wywołuje .asmx jest zabezpieczona? Czy używasz do tego uwierzytelniania formularzy? – Badri
@Badri - Dziękuję za pytania. Używam formularzy sieciowych ASP.NET. Asmx jest w tej samej aplikacji. Robię aplikację do czatu i chcę użyć usługi sieciowej do zapisania wiadomości i pobrania nowej wiadomości. Chcę zrobić bezpieczne usługi internetowe do wysyłania wiadomości na czacie. Czat może korzystać tylko z zarejestrowanego użytkownika. Do uwierzytelnienia chcę użyć uwierzytelniania formularza. – Jenan