可以绕过 servicestack 的非标准身份验证机制

Possible to bypass servicestack's authentication mechanisms for non standard authentication

我的身份验证机制在某种程度上有所不同,它无法适应 ServiceStack 当前的一种身份验证方法(即使覆盖方法 'TryAuthenticate' 也无法提供解决方案)。那么是否可以从任意 ServiceStack 服务进行身份验证?

举个例子:

  1. 我打开一个普通的旧 HTML 登录页面(我正在使用 Angular 作为记录)。
  2. 我登录并调用我的自定义 ServiceStack 服务,以便将非标准凭据发送到服务器(当然使用 Angular 的 http 指令)。
  3. 我自己验证凭据。如果正确的话,我喜欢连接到 servicestack 身份验证机制,并且可能必须将 ServiceStack 身份验证 cookie 发送回浏览器。我对么?

如果有人可以完成 3 个工作,我可以调用具有 authenticate 属性的 ServiceStack 服务

要允许通过[Authenticate]属性,需要any one of the registered AuthProvidersIsAuthorized()到returntrue,即:

public class CustomAuthProvider : AuthProvider
{
    public CustomAuthProvider()
    {
        this.Provider = "custom";
    }

    public override bool IsAuthorized(
        IAuthSession session, IAuthTokens tokens, Authenticate request=null)
    {
        return true; //custom logic to verify if this session is authenticated
    }

    public override object Authenticate(
        IServiceBase authService, IAuthSession session, Authenticate request)
    {
        throw new NotImplementedException();
    }
}

Plugins.Add(new AuthFeature(() => new CustomUserSession(),
    new IAuthProvider[] {
        new CustomAuthProvider()
    }));

在您的自定义身份验证服务中,您还应该使用 IsAuthenticated=true 保存用户会话,例如:

public object Any(CustomAuth request)
{
    //Authenticate User
    var session = base.SessionAs<CustomUserSession>();
    session.IsAuthenticated = true;
    this.SaveSession(session);        
}