gpt4 book ai didi

angularjs - 如何在 Angular 资源中设置owin token 身份验证 header

转载 作者:行者123 更新时间:2023-12-03 06:51:20 24 4
gpt4 key购买 nike

我对目前的工作非常陌生。我可能解释得不好,但就我所理解的而言,我想把我的理解也表达出来。

我正在使用基于 Owin token 的 Web api 身份验证,对于登录,我调用返回访问 token 的 token 方法。我想知道如何保护我们的 Web api 的安全,以便在没有访问 token 的情况下,它不应允许调用 Web api 方法。我正在使用 Angular JS 资源,我相信我们需要在 AngularJS 服务部分中定义 header ,但是我不知道在哪里以及如何准确地定义 header ,任何人都可以帮助我。

示例:-

这是我用 angularjs 编写的服务,

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

这是Web api方法

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

到目前为止,我可以在没有访问 token 的情况下访问 Web api,我想以这样的方式进行设计:如果 token 不可用,则不应允许使用 [授权] Web api 方法。

提前致谢:)

最佳答案

在 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"];
}
}
}

你可以像这样在 Controller 中使用它。

[AuthorizeAPIAttribute]
public class MainController : ApiController
{
}

现在,当您从 angular.service 传递安全 key 时,该服务将 checkin 上述过滤器。

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');
}]);

如上所述,您可以在项目中全局设置安全 key 。

关于angularjs - 如何在 Angular 资源中设置owin token 身份验证 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37914573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com