我正在编写用于访问另一个REST API的Web API(v2.2)。原因是我想限制一些功能并提供更友好的数据。总之,我正在为一些REST API编写包装器。
我通过 protected void Application_Start()
{
GlobalConfiguration.Configuration.MessageHandlers
.Add(new BasicAuthMessageHandler(){
PrincipalProvider = new DummyPrincipalProvider()
});
//...
}
的实施提供身份验证/授权。这是代码片段:
AuthorizationFilterAttribute
现在我想明白,如果我将public override void OnAuthorization(HttpActionContext actionContext)
{
var authorizeHeader = actionContext.Request.Headers.Authorization;
if (authorizeHeader != null
&& authorizeHeader.Scheme.Equals("basic", StringComparison.OrdinalIgnoreCase)
&& String.IsNullOrEmpty(authorizeHeader.Parameter) == false)
{
// Code to test is username/password correct for second API
// Trying to get some recourse with provided credentials
// ...
}
}
设置为控制器的动作,就像这样:
attribute
每当我请求此操作时,[HttpGet]
[Route("{taskId}/{dispatchId}")]
[SecureResourceAttribute] // This is my attribute
public IHttpActionResult GetDispatch(string taskId, string dispatchId)
方法都会执行?在任何地方存储该客户端是否已获得授权?
如果否,我如何才能存储该客户端已获得授权?
谢谢你的时间。
答案 0 :(得分:2)
问:每次通话都会调用OnAuthorization吗?
答:如果控制器使用[授权]属性修饰,是。
问:在任何地方存储该客户端是否已获得授权?
答:不会。默认情况下,该服务是无状态的。
问:如果否,我如何才能存储该客户已获得授权?
答:这再次回到WEB API服务是无状态的事实,并且不同请求之间没有任何关系。