我正在运行一个带有多个控制器的OWIN服务器。我有一个处理客户端证书验证的OWIN中间件。
对于我的新控制器,我需要一个额外的授权步骤。
我的控制器POSTurl将是:www.myUrl.com/api/newController/{service_id}
。客户将同时传递客户证书。
客户仅被授权更改特定service_ids
。我需要验证带有证书X的客户端X是否有权修改URL参数中传递的service_id_1
。我将client_cert
- >存储了service_ids
映射。
对于单个控制器,这是最好的方法吗?我假设添加一个Owin中间件不是正确的方式,因为所有控制器的所有请求都将通过它。
答案 0 :(得分:1)
我认为这里最好的解决方案是检查控制器操作中的正确访问权限,或创建自定义授权属性,并在内部实现您的特定方案。
用于内联检查您的操作我认为您知道该怎么做,对于自定义授权属性,这是您需要做的。
您需要创建自定义授权属性并覆盖OnAuthorization
方法,然后在其中您需要从请求参数中读取提交的证书,并进行检查以授权或不授权来自当前操作的调用者,基于证书和请求的serviceID。
创建自定义授权属性的示例可以在下面找到:
public class CertificateAuthorizationAttribute : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
// your custom logic here
base.OnAuthorization(actionContext);
}
}
我的建议:因为这是特定于此操作方法而不是一般授权问题,我会在您的方法中进行检查,如果这需要针对多个控制器/操作进行扩展,那么我可能会去用于自定义授权属性。