不使用身份验证在WEB API中使用安全令牌进行授权

时间:2016-11-16 06:25:14

标签: asp.net-web-api windows-services authorization token

如何使用安全令牌保护WEB API而不使用任何登录。我们希望在Windows服务中使用此WEB API从其他数据库服务器获取数据。无法使用用户登录或角色 我们尝试[Authorize]属性,但都是徒劳的。 我试试这个

 [MyAuthorize]
    public class MasterDataController : ApiController
    {
        [HttpGet]
        public string myMethod(string Name)
        {
            return Name;
        }
    }

MyAuthorize是

 public class MyAuthorizeAttribute : AuthorizeAttribute
    {
public override void OnAuthorization(AuthorizationContext Context)
  {
   //Some logic to validate token...
  }
}

WebApiConfig.cs是

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Filters.Add(new AuthorizeAttribute());
            config.Routes.MapHttpRoute(
               name: "ActionGetPatientAndAppointmentInfo",
               routeTemplate: "TestAPI/{controller}/{action}",
               defaults: new 
               {
                   controller = "MasterData",
                   action = "myMethod"
               }
           );

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional}
            );


        }
    }

当我们使用授权标题

在REST客户端中测试方法时

enter image description here

OnAuthorization 方法本身并未执行。 响应始终显示未经授权的请求。

1 个答案:

答案 0 :(得分:0)

这是OAuth2的完美场景。您需要能够生成令牌,然后保护API端点,以便只实现在授权头中使用此令牌的调用。

我建议使用像Owin这样的东西来为你提供所需的一切。

这是应用程序级授权,因此您将拥有两个密钥,即ClientID和ClientSecret,它们将用于生成令牌。这样,您甚至可以使用相同的API构建多个应用程序,每个API都通过自己的一组密钥进行识别。

这是一篇详细的文章,虽然有点陈旧,但显示如何从头开始:

https://eidand.com/2015/03/28/authorization-system-with-owin-web-api-json-web-tokens/

相关问题