ServiceStack认证[身份验证]属性无法处理的SS-id和β-PID(ServiceStac

2019-10-19 06:56发布

我创建了一个调用一个TestService的AuthenticateService并对用户进行认证。 在致电我清除了所有我的cookies,以确保一旦我得到的回应,我得到了TestService的ss-idss-pid饼干,我做得到。

AppHost配置:(SS v4.0.8.0)

//Plugins
Plugins.Add(new RazorFormat());
Plugins.Add(new SessionFeature());
Plugins.Add(new AuthFeature(() => new CustomUserSession(),
            new IAuthProvider[] { new CustomCredentialsAuthProvider() }));

container.Register<ICacheClient>(new MemoryCacheClient());

CustomCredentialsAuthProvider

public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
    public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
    {
        // Custom Auth Logic
        // Return true if credentials are valid, otherwise false
        // bool isValid = Membership.ValidateUser(userName, password);
        return true;
    }

    public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IAuthTokens tokens, Dictionary<string, string> authInfo)
    {
        base.OnAuthenticated(authService, session, tokens, authInfo);

        var loginManager = authService.TryResolve<LoginManager>();
        var loginInfo = loginManager.GetLoginInfo(session.UserAuthName);

        authService.SaveSession(loginInfo.CustomUserSession, SessionExpiry);
    }
}

TestService

public class TestService : Service
{       
    public object Any(Test request)
    {
        var response = new TestResponse();

        var authService = base.ResolveService<AuthenticateService>();            
        var authResponse = authService.Authenticate(new Authenticate
        {
            UserName = "user",
            Password = "password",
            RememberMe = false
        });           

        base.Request.ResponseContentType = MimeTypes.Html;  //Temporary workaround, will not be needed in v4.0.9+

        return response;
    }
}

因此,回顾一下。 我打的TestService的,认证用户,返回响应,确保响应包含ss-idss-pid饼干。 现在,我试着打有其他业务[Authenticate]属性。 我在服务断点嗟和我在浏览器这个响应。

处理程序请求未找到:

Request.HttpMethod:GET Request的PathInfo:/登录的Request.QueryString:ServiceStack.NameValueCollectionWrapper
Request.RawUrl:?/登录重定向= HTTP%3A%2F%2flocalhost%3a50063%2fBOP%2fbasic-INFO-2

我已经尝试应用[Authenticate]在服务方法和在整个服务属性,具有相同的结果。 我已经测试了,我能得到的服务方法,如果[Authenticate]属性已被注释掉,它的工作原理,所以它不是服务配置问题或路由问题。

我还创建了两个服务方法/basic-info-1/basic-info-2 /basic-info-2具有[Authenticate]属性和basic-info-1不。 认证后,我能够得到basic-info-1没有问题,也证实了我可以为所保存的会话信息OnAuthenticated()方法。 对于/basic-info-2我得到的处理程序错误。

我不知道在发生什么事[Authenticate]属性,但是从处理程序错误的外观上来看,认证失败和SS试图重定向我/login不我的项目,因此在处理错误存在。 但不知为何,身份验证属性是不承认我的ss-idss-pid饼干?

Answer 1:

诊断:

您应该检查您的未经验证的方法返回的会话( /basic-info-1您使用身份验证后/test 。 如果您的会话工作正常,你应该看到UserAuthIdUserAuthNameId正确设置会话。 它不会出现这些设置是否正确和[Authenticate]属性,因此没有看到一个有效的会话。

可能的问题:

这个问题很可能在你的OnAuthenticated方法,特别是你的LoginManager当你保存会话没有正确返回这些值。

从您的代码:

var loginManager = authService.TryResolve<LoginManager>();
var loginInfo = loginManager.GetLoginInfo(session.UserAuthName); 

authService.SaveSession(loginInfo.CustomUserSession, SessionExpiry);
  • loginInfo.CustomUserSession.UserAuthIdnull
  • loginInfo.CustomUserSession.UserAuthNamenull
  • loginInfo.CustomUserSession.Idnull

解:

打电话之前正确设置这些属性SaveSession



文章来源: ServiceStack Authentication [Authenticate] Attribute Fails to Process the ss-id and ss-pid