使用来自请求的参数在OWIN中间件中请求授权

本文关键字:请求 OWIN 中间件 授权 参数 | 更新日期: 2023-09-27 18:14:57

我正在运行一个拥有多个控制器的OWIN服务器。我有一个OWIN中间件来处理客户端证书验证。

对于我的新控制器,我需要额外的授权步骤。

我的控制器POSTurl为:www.myUrl.com/api/newController/{service_id}。客户端将同时传递客户端证书。客户端只有修改特定service_ids的权限。我需要验证持有X证书的X客户端是否被授权修改URL参数中传递的service_id_1。我将存储client_cert -> service_ids映射。

对于单个控制器,哪一种方法最好?我认为添加Owin中间件并不是正确的方法,因为所有控制器的所有请求都将通过它。

使用来自请求的参数在OWIN中间件中请求授权

我认为这里最好的解决方案是检查控制器操作内部是否有适当的访问权限,或者创建一个自定义授权属性,并在内部实现您的特定场景。

在你的动作中进行内联检查,我想你知道该怎么做,对于自定义授权属性,这是你需要做的。

您将需要创建一个自定义授权属性并覆盖OnAuthorization方法,然后在其中,您需要从请求参数中读取提交的证书,并根据证书和请求的serviceID进行检查,以根据当前操作授权或不授权调用者。

创建自定义授权属性的示例如下:

public class CertificateAuthorizationAttribute : AuthorizeAttribute
{      
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        // your custom logic here
        base.OnAuthorization(actionContext);
    }
}

我的建议:因为这是特定于这个动作方法,而不是一般的授权问题,我会去做检查在你的方法,如果这需要扩展到多个控制器/动作,那么我可能会去一个自定义的授权属性。