1

我正在尝试编写自己的身份验证,因此我继承CredentialsAuthProvider并覆盖了 Authenticate 方法。身份验证工作正常,当我调用另一个服务时,我可以看到我保存在会话中的所有数据。

问题是:当我尝试添加 Authenticate 属性并从客户端调用它时,即使我想使用 Requered Role,它也会抛出未经授权的异常。

身份验证服务是:

public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
    public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
    {
        return true;
    }

    public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request)
    {

        session.FirstName = "Name";
        //...
        session.Authenticate = true;
        session.UserName = request.UserName;
        session.Roles = new List<string>;
        session.Roles.Add("admin")
        //....
        authService.SaveSession(session, SessionExpiry);

        // Return custom object
        return new UserAuthResponse { SessionId = session.Id ......};

    }

应用主机是:

public override void Configure(Container container)
{
    Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {
            new CustomCredentialsAuthProvider()
        }));
    Plugins.Add(new RegistrationFeature());

    container.Register<ICacheClient>(new MemoryCacheClient());
    var userRep = new InMemoryAuthRepository();
    container.Register<IUserAuthRepository>(userRep);


}

和测试服务:

[Authenticate]
public class TestService : Service { 
    public object Any(UserRequest request) {

       return new UserResponse{Name = request.Name};
    }
}

这不是真正的代码,所以很抱歉语法错误!))))但想法是一样的!请帮我看看有什么问题,为什么我在调用测试服务时出现未经授权的异常?????????

4

1 回答 1

2

当我遇到这个问题时,我必须在[CustomAuthenticate]这个 gist 的指导下创建一个自定义的身份验证属性 - > https://gist.github.com/joeriks/4518393

在 AuthenticateIfBasicAuth 方法中,我将提供程序设置为使用 MyAuthProvider.Name 而不是 BasicAuthProvider.Name

然后,

[CustomAuthenticate]
public class TestService : Service { 
    public object Any(UserRequest request) {

       return new UserResponse{Name = request.Name};
    }
}

另见:http: //joeriks.com/2013/01/12/cors-basicauth-on-servicestack-with-custom-authentication/

于 2013-08-04T22:51:46.323 回答