如何使用ServiceStack进行基于令牌的身份验证

时间:2013-05-21 15:39:07

标签: authentication servicestack basic-authentication

如何使用ServiceStack实现以下场景?

初始请求转到http://localhost/auth,其授权标头定义如下:

Authorization: Basic skdjflsdkfj=

IAuthProvider实现针对用户存储进行验证,并将会话令牌作为响应主体(JSON)返回。

客户端使用此令牌,使用Authorization标头对http://localhost/json/reply/orders之后的请求进行重新发送,如下所示:

Authorization: BasicToken <TokenFromPreviousSuccessfulLogin>

使用AuthenticateAttribute我想标记我的服务以使用身份验证。

如何为后续请求实现令牌验证? 我应该如何实现IAuthProvider来提供令牌? 我如何注册提供商等?使用RequestFilters或使用AuthFeature

1 个答案:

答案 0 :(得分:7)

ServiceStack的JWT AuthProviderAPI Key AuthProvider都使用基于令牌的身份验证。

否则BasicAuth Provider是一个非常简单的类,它只是从BasicAuth标题中提取UserName和Password并对其进行评估:

public override object Authenticate(...)
{
    var httpReq = authService.RequestContext.Get<IHttpRequest>();
    var basicAuth = httpReq.GetBasicAuthUserAndPassword();
    if (basicAuth == null)
        throw HttpError.Unauthorized("Invalid BasicAuth credentials");

    var userName = basicAuth.Value.Key;
    var password = basicAuth.Value.Value;

    return Authenticate(authService, session, userName, password, request.Continue);
}

如果你想提供增强的行为,我只是继承这个类检查Authorization: BasicToken标头,如果它存在则使用,否则调用base.Authenticate(...)方法来执行初始验证。