如何使用安全令牌保护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客户端中测试方法时但 OnAuthorization 方法本身并未执行。 响应始终显示未经授权的请求。
答案 0 :(得分:0)
这是OAuth2的完美场景。您需要能够生成令牌,然后保护API端点,以便只实现在授权头中使用此令牌的调用。
我建议使用像Owin这样的东西来为你提供所需的一切。
这是应用程序级授权,因此您将拥有两个密钥,即ClientID和ClientSecret,它们将用于生成令牌。这样,您甚至可以使用相同的API构建多个应用程序,每个API都通过自己的一组密钥进行识别。
这是一篇详细的文章,虽然有点陈旧,但显示如何从头开始:
https://eidand.com/2015/03/28/authorization-system-with-owin-web-api-json-web-tokens/