ServiceStack和.NET Core中间件

3

我想知道是否可以在.NET Core上使用ServiceStack以及中间件。

我的用例是,我想使用ServiceStack实现API,并使用授权策略和OpenID Connect中间件,例如IdentityServer4.AccessTokenValidation。

如果不行,是否有任何替代方法可以设置ServiceStack以与OpenID Connect服务器一起工作?

2个回答

3
我使用以下代码将ServiceStack和.NET Core进行了整合。我不确定这是否是实现目标的最佳方式,但到目前为止它运行良好。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class AuthorizeAttribute : RequestFilterAsyncAttribute, IAuthorizeData
{
    public AuthorizeAttribute(ApplyTo applyTo)
        : base(applyTo)
    {
        Priority = -100;
    }

    public AuthorizeAttribute()
        : this(ApplyTo.All)
    {
    }

    public string Policy { get; set; }
    public string Roles { get; set; }
    public string AuthenticationSchemes { get; set; }

    public override async Task ExecuteAsync(IRequest req, IResponse res, object requestDto)
    {
        var policyProvider = req.TryResolve<IAuthorizationPolicyProvider>();
        var filter = new AuthorizeFilter(policyProvider, new[] {this}); 
        var webRequest = req.OriginalRequest as HttpRequest;

        var actionContext = new ActionContext(webRequest.HttpContext, new RouteData(), new ActionDescriptor());
        var context = new AuthorizationFilterContext(actionContext, new List<IFilterMetadata>());
        await filter.OnAuthorizationAsync(context);
        if (context.Result is ChallengeResult)
        {
            res.StatusCode = 401;
            res.EndRequest();
        }
        else if (context.Result is ForbidResult)
        {
            res.StatusCode = 403;
            res.EndRequest();
        }
    }
}

2

ServiceStack.Authentication.IdentityServer 有一些限制,例如它使用内省端点来验证令牌,而我想避免这种情况。是否有一种好的方法可以同时使用两者,例如自定义过滤器或自定义身份验证提供程序,在内部使用 AccessTokenValidation 的逻辑? - adlerus
@Eugene 我不熟悉IdentityServer,所以无法确定,但全局过滤器+过滤器属性是在调用过滤器之前执行自定义逻辑的方法。我的第一步是创建一个过滤器属性,如Authenticate,它检查传入请求的令牌。如果你的.NET Core过滤器可以在HttpContext.Items中添加一些内容,你可以使用(HttpRequest)req.OriginalRequest在ServiceStack中访问底层的.NET Core请求。 - mythz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接