2

У меня есть приложение для Android, которые имеют форму входа для студента, и я хочу, чтобы проверить студенческое удостоверение на веб-апи в зависимости от хранимых данных в SQL сервереАутентифицировать андроид приложение для вызова веб-служба Api

Я искал в Интернете и смотреть много видеороликов, рассказывающих о многих сценариях, и ничто не помогло мне.

Все, что я хочу, это обычай проверки для моей службы отдыха (так что я должен послать удостоверение для каждого запроса)

  • Что я должен сделать в asp.net службы Web API
  • как я могу реализовать что при приложении android

ответ

1

Я использовал базовую аутентификацию для безопасности, так что я должен предоставить base64 кодирование

username:password

в заголовке для каждого запроса, как указано ниже:

авторизации: Basic «кодируются имя пользователя: пароль

httpGet.setHeader("Authorization", "Basic "+encodeUsernameAndPassword()); 

На стороне сервера я реализовал обработчик сообщений

public class BasicAuthenticationHandler : DelegatingHandler 
    { 
     public readonly IAuthenticationService authService; 
     public BasicAuthenticationHandler(IAuthenticationService service) 
     { 
      this.authService = service; 
     } 

     protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
     { 
      AuthenticationHeaderValue authHeader = request.Headers.Authorization; 
      if (authHeader == null || authHeader.Scheme != "Basic") 
      { 
       return Unauthorized(request); 
      } 
      string encodedCredentials = authHeader.Parameter; 
      var credentialsBytes = Convert.FromBase64String(encodedCredentials); 
      var credentials = Encoding.ASCII.GetString(credentialsBytes).Split(':'); 

      if (!authService.Authenticate(credentials[0], credentials[1])) 
      { 
       return Unauthorized(request); 
      } 

      string[] roles = null;//todo 
      IIdentity identity = new GenericIdentity(credentials[0], "Basic"); 
      IPrincipal user = new GenericPrincipal(identity, roles); 


      HttpContext.Current.User = user; 


      return base.SendAsync(request, cancellationToken); 
     } 
3

Похоже, вы не искали «аутентификацию на основе токена веб-API»;) Во всяком случае, что вам нужно реализовать, очень просто. Вам необходимо использовать OAuth 2.0 Resource Credentials Flow, который означает, что вы хотите указать имя пользователя/пароль только один раз для определенной конечной точки i.e (/ токен), а затем вы, если имя пользователя/пароль действительны, получили что-то, называемое токен-подписчиком. Этот токен действителен в течение указанного периода, и вы можете настроить его в своем веб-интерфейсе. После того, как вы получите токен доступа, вам необходимо безопасно его хранить в своем приложении для Android, затем вы отправляете его с каждым запросом в свои защищенные конечные точки, защищенные веб-api, используя заголовок авторизации (Схема несущей ( ). Я написал очень подробный пост, который покрывает ваш сценарий на 100%. Пожалуйста, проверьте почту Token Based Authentication и дайте мне знать, если вам нужна дополнительная помощь.