我们正在评估Web API的服务堆栈v.4.5.6.0,我们希望客户端能够使用基本身份验证或凭据进行身份验证,但我们不希望他们能够提供基本身份验证头使用我们的服务时,JWT令牌或会话cookie的位置。虽然我意识到这有点武断,但是有没有办法从特定提供商中排除路由,或者在他们登录后强制使用令牌/ cookie进行身份验证?
AppHost的Auth配置:
private void ConfigureAuth(Container container)
{
var appSettings = new AppSettings();
this.Plugins.Add(new AuthFeature(() => new CustomAuthUserSession(),
new IAuthProvider[]
{
new CredentialsAuthProvider(),
new BasicAuthProvider(),
new JwtAuthProvider(appSettings)
}) { IncludeAssignRoleServices = false, MaxLoginAttempts = 10} );
var userRepository = new CustomUserAuthRepository(container.TryResolve<IDbConnectionFactory>());
container.Register<IAuthRepository>(userRepository);
}
答案 0 :(得分:2)
ServiceStack允许您决定要对您的服务进行身份验证的AuthProviders,但它不允许您单独配置哪些特殊AuthProviders应用于单个服务。随意add this a feature request。
但是,如果您想确保只通过JWT访问服务,您可以在服务中添加FromToken
的检查,表明会话由JWT令牌填充,例如:
[Authenticate]
public class MyServices : Service
{
public object Any(MyRequest request)
{
var session = base.SessionAs<AuthUserSession>();
if (!session.FromToken)
throw HttpError.Unauthorized("Requires JWT Authentication");
//...
}
}
从现在为available on MyGet的v4.5.7开始,您还可以使用新的session.AuthProvider
属性,该属性指示AuthProvider用于对用户进行身份验证的内容,例如:
public object Any(MyRequest request)
{
var session = base.SessionAs<AuthUserSession>();
if (session.AuthProvider != JwtAuthProvider.Name)
throw HttpError.Unauthorized("Requires JWT Authentication");
//...
}