有没有办法指定在特定服务 class 上使用哪个 IAuthProvider 进行身份验证?

Is there a way to specify which IAuthProvider to use for authentication on a particular Service class?

我在同一个项目中有两个服务:

    [Authenticate]
    public class OnlyDoesBasicAuth : Service
    {   
    }

    [Authenticate]
    public class OnlyDoesJwtAuth : Service
    {
    }

    //AppHost
    public override void Configure(Container container)
    {
        Plugins.Add(new AuthFeature(
            () => new AuthUserSession(),
                new IAuthProvider[]
                {
                    new BasicAuthProvider(AppSettings),
                    new JwtAuthProvider(AppSettings)
                }
            )
        {
            HtmlRedirect = null
        });
    }

按照这种设置方式,我可以使用基本身份验证或使用有效的 Bearer 令牌进入 both 服务。我更愿意拥有它,以便只有一项服务可以执行一种身份验证方式。有没有办法指定提供者用于身份验证?

我不知道如何处理这个问题。我在想,也许有一种方法可以通过全局请求过滤器或类似的东西,但也许那不是可行的方法。我可以将项目分成两个项目,这肯定会奏效,但这不是我想要的处理方式。

我只是在寻找一种方法,让 OnlyDoesBasicAuth 仅在身份验证时使用 BasicAuthProvider,而 OnlyDoesJwtAuth 仅在同一项目中使用 JwtAuthProvider。任何和所有建议将不胜感激。

提前致谢。

通常,一旦您使用任何 Auth Provider 进行了身份验证,您就会在 ServiceStack 中的任何地方被视为经过身份验证的用户。

您可以限制访问,以便需要通过在 [Authenticate] 属性中指定 AuthProvider 名称对服务进行身份验证,例如:

[Authenticate(BasicAuthProvider.Name)]
public class OnlyDoesBasicAuth : Service
{   
}

[Authenticate(JwtAuthProvider.Name)]
public class OnlyDoesJwtAuth : Service
{
}

或者,您可以在您的服务中验证他们需要通过特定的 Auth Provider 进行身份验证,例如:

if (SessionAs<AuthUserSession>().AuthProvider != JwtAuthProvider.Name)
   throw HttpError.Forbidden("JWT Required");