2

Я очень новичок в том, что я сейчас работаю. Я, возможно, не очень хорошо объясняю, но, насколько я понял, я хотел бы рассказать о том же.Как установить заголовок аутентификации токена owin в угловой ресурс

Я использую аутентификацию на основе токена Owin для веб-api, для входа я вызываю метод токена, который возвращает токен доступа. Я хотел бы знать, как защитить наш веб-api, так что без токена доступа он не должен вызывать метод web api. Я использую угловой ресурс js, я считаю, что нам нужно определить заголовок в части обслуживания angularjs, но где и как именно я не имею ни малейшего понятия, может кто-нибудь помочь мне в этом.

Пример: -

Это мое обслуживание написано в angularjs,

sghServices.factory('GlobalSettingsService', function ($resource) { 
return $resource("../Api/eClaim/SecondGlobalSettings", 
    {}, 
    { 
     post: { 
      method: 'POST', isArray: false, 
      headers: { 'Content-Type': 'application/json' } 
     }, 
     update: { 
      method: 'PUT' 
     } 
    }); 
}); 

Это метод веб-апи

[Authorize]   
[Route("~/Api/eClaim/GlobalSettings")] 
[HttpGet] 
public ReportAndeCliam GetGlobalSettings() 
{ 
    //Code Wriiten here 
} 

В настоящее время я могу получить доступ к Web API без доступа токен, я хочу, чтобы дизайн таким образом, если токен недоступен, он не должен позволять использовать метод [Authorized] web api.

Спасибо заранее:

+0

Вы можете сделать фильтр в коде API MVC для проверки ключа безопасности из заголовка. –

+0

Как я видел в примере, как только мы используем атрибут [Авторизовать] в методе, он делает безопасным метод web api и не позволит нам вызывать метод web api без токена доступа. Пожалуйста, поправьте меня, если мое понимание ошибочно. – John

+0

Да, вы правы. Я обновляю свой ответ. просто проверьте это. –

ответ

6

Сделать класс фильтра в api, как показано ниже.

public class AuthorizeAPIAttribute : AuthorizationFilterAttribute 
{ 
    /// <summary> 
    /// Calls when a process requests authorization. 
    /// </summary> 
    /// <param name="actionContext">The action context, which encapsulates information for using <see cref="T:S:System.Web.Http.Filters.AuthorizationFilterAttribute" />.</param> 
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     if (!ConfigItems.APISecurityEnable) 
     { 
      return; 
     } 

     var headers = actionContext.Request.Headers; 
     var security = headers.Any(x => x.Key == "Security"); 
     if (security) 
     { 
      var value = headers.FirstOrDefault(x => x.Key == "Security").Value.FirstOrDefault(); 
      if (value != null) 
      { 
       string token = value; 
       if (token == ConfigItems.APIToken) 
       { 
        return; 
       } 
      } 
     } 

     actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized); 
     actionContext.Response.Content = new StringContent("Security Failed", Encoding.UTF8, "application/json"); 
     base.OnAuthorization(actionContext); 
    } 
} 

ConfigItems класса

/// <summary> 
/// ConfigItems class 
/// </summary> 
public class ConfigItems 
{ 
    /// <summary> 
    /// Gets a value indicating whether API Security Enable 
    /// </summary> 
    public static bool APISecurityEnable 
    { 
     get 
     { 
      if (Convert.ToBoolean(WebConfigurationManager.AppSettings["APISecurityEnable"])) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 

    /// <summary> 
    /// Gets a value APIToken 
    /// </summary> 
    public static string APIToken 
    { 
     get 
     { 
      return WebConfigurationManager.AppSettings["APIToken"]; 
     } 
    } 
} 

И вы можете использовать его в контроллер в так.

[AuthorizeAPIAttribute] 
public class MainController : ApiController 
{ 
} 

Теперь, когда вы передаете ключ безопасности из углового сервиса, который будет проверять фильтр выше.

angular.module('userApp').factory('httpRequestInterceptor', function() { 
    return { 
     request: function (config) { 
      config.headers['Security'] = "Key"; 
      return config; 
     } 
    }; 
}); 
angular.module('userApp', ['ngAnimate', 'ngRoute', 'angular.filter']).config(['$httpProvider', function ($httpProvider) { 
    $httpProvider.interceptors.push('httpRequestInterceptor'); 
}]); 

Как и выше, вы можете установить ключ безопасности во всем мире в проекте.

+0

Хорошо, спасибо, я попробую, как вы предложили, если это не сработает, пожалуйста, помогите мне. И еще раз спасибо :) – John

+0

Хорошо, попробуйте. Я думаю, что это определенно сработает, потому что он работает в моем проекте. –

+0

@junaidameen, если его работа затем отметит как принять ответ, чтобы другие люди могли знать, что это рабочий код. –