具有 [Authenticate] 和 [ValidateApiKey] 属性的 ServiceStack 身份验证

ServiceStack authentication with both [Authenticate] and [ValidateApiKey] attributes

我有一些端点装饰有 [Authenticate] 属性。现在,第三方客户端必须使用共享的 API 密钥访问相同的端点。

由于这两种情况的代码完全相同,我想首先检查当前请求是否来自经过身份验证的用户,如果不是,则检查是否提供了有效的 API 密钥作为回退。

有没有办法对同一端点同时使用 [Authenticate][ValidateApiKey] 属性?

类似于:

[Authenticate | ValidateApiKey]
public long Post(MyDto request)
{
   // ....
}

只能组合属性以添加功能,即它们不能用作后备或开关。要获得所需的行为,您的 [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);
        }            
    }
}

Note: Responses should be reference types (e.g. DTO's) or raw strings not value types.

public object Post(MyDto request)
{
   // ....
}