ASP.NET Session сам по себе является безопасностью на основе токенов, и да, вы можете легко реализовать это, выполнив
[WebMethod(true)]
и да, любой веб-метод требует, чтобы сначала был выполнен вход в систему, он должен вызвать User.IsAuthenticated, который проверяет маркер сеанса.
Вы можете легко реализовать аутентификацию формы (оставьте пустой web.config, вы можете использовать FormsAuthentication в коде).
например,
[WebMethod(true)]
public string DoLogin(
string username,
string password)
{
//.. do your verification
FormsAuthentication.SetAuthCookie(username,false);
return "Login Sucessful";
}
[WebMethod(true)]
public string ChangePassword(
string oldPass,
string newPass)
{
// verify user is logged on or not..
if(!User.IsAuthenticated)
return "Please Login";
// The code below is secure, only
// authenticated user will go through below
// change pass...
return "Password Changed Successfully.";
}
Мы разработали много сайтов Flex + ASP.NET, мы сделали то же самое, но вместо возврата «string» мы обычно возвращаем класс, подобный следующему ...
public class WSResult<T>{
public bool Successful;
public string Message;
public T Result;
public T[] Results;
}
Соглашение простое: если метод был успешным, вы возвращаете Success = true, и в зависимости от того, хотите ли вы вернуть массив элементов или только один элемент, вы можете вернуть либо Results, либо Result. В случае, если произошла какая-либо ошибка или несанкционированный доступ, вы можете установить Successful = false и установить Message в качестве подробной строки. Согласно следующему примеру.
[WebMethod(true)]
public WSResult<BusinessUser> DoLogin(
string username,
string password)
{
try{
BusinessUser user = BusinessUser.GetByUsername(username);
if(user==null)
throw new Exception("User not found");
if(user.Password != password)
throw new Exception("Password did not match");
return new WSResult<BusinessUser>{ Result=user };
}catch(Exception ex)
{
// this will even catch any DAL exceptions or any system error as well
// Log Exception... somewhere for tracking...
return new WSResult<BusinessUser>{ Successful=false, Message = ex.Message };
}
}