具有 [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)
{
// ....
}
我有一些端点装饰有 [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)
{
// ....
}