我有一些用[Authenticate]属性修饰的端点。现在,第三方客户端必须使用共享API密钥访问同一端点。
由于这两种情况的代码完全相同,我想首先检查当前请求是否来自经过身份验证的用户,如果没有,则检查是否提供了有效的API密钥。
有没有办法同时使用 [Authenticate] 和 [ValidateApiKey] 属性?
类似的东西:
[Authenticate | ValidateApiKey]
public long Post(MyDto request)
{
// ....
}
答案 0 :(得分:2)
属性只能组合以添加功能,即它们不能用作后备或交换机。为了获得所需的行为,您的[ValidateApiKey]
属性应该作为其实现的一部分执行验证回退,例如:
public class ValidateApiKeyAttribute : RequestFilterAttribute
{
public override void Execute(IRequest req, IResponse res, object reqDto)
{
var session = req.GetSession();
if (session == null || !session.IsAuthenticated)
{
//If not a valid key, execute the `[Authenticate]` attribute
//to handle failed response
if (!CheckValidApiKey(req))
new AuthenticateAttribute().Execute(req,res,reqDto);
}
}
}
注意:响应应该是引用类型(例如DTO)或原始字符串而不是值类型。
public object Post(MyDto request)
{
// ....
}